diff --git a/src/index.ts b/src/index.ts index c895f1e..8228f4f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,9 +1,9 @@ -import { ObjectAP } from './models/Object.model'; +import { ASObject } from './models/ASObject.model'; -const obj = new ObjectAP({ +const obj = new ASObject({ id: 'someId', }); -const obj2 = new ObjectAP({ +const obj2 = new ASObject({ cc: '123', content: obj, }).addContext(); diff --git a/src/models/Base.model.ts b/src/models/ASBase.model.ts similarity index 91% rename from src/models/Base.model.ts rename to src/models/ASBase.model.ts index 18868a8..a1c7cda 100644 --- a/src/models/Base.model.ts +++ b/src/models/ASBase.model.ts @@ -1,11 +1,12 @@ // TODO: types +// TODO: renaming/refactor export type Context = string | any[]; export interface ModelBaseAPWithContext { '@context'?: Context; } -export class ModelBaseAP { +export class ASBase { public fields: T & ModelBaseAPWithContext; constructor(fields: T) { @@ -27,7 +28,7 @@ export class ModelBaseAP { public plain(): Record { const result = {} as Record; for (const [key, node] of Object.entries(this.fields)) { - if (node instanceof ModelBaseAP) { + if (node instanceof ASBase) { result[key] = node.plain(); } else { result[key] = node; diff --git a/src/models/ASCollectionBase.model.ts b/src/models/ASCollectionBase.model.ts new file mode 100644 index 0000000..048746a --- /dev/null +++ b/src/models/ASCollectionBase.model.ts @@ -0,0 +1,16 @@ +import { ASObject, ASObjectFields } from "./ASObject.model"; + +// TODO: types +// https://www.w3.org/TR/activitystreams-core/#collection +export interface ASCollectionBaseFields extends ASObjectFields { + totalItems?: any; + first?: any; + last?: any; + current?: any; +} + +export class ASCollectionBase extends ASObject { + constructor(fields: ASCollectionBaseFields) { + super(fields); + } +} \ No newline at end of file diff --git a/src/models/Object.model.ts b/src/models/ASObject.model.ts similarity index 77% rename from src/models/Object.model.ts rename to src/models/ASObject.model.ts index adb49d0..e90109a 100644 --- a/src/models/Object.model.ts +++ b/src/models/ASObject.model.ts @@ -1,8 +1,8 @@ -import {ModelBaseAP} from "./Base.model"; +import {ASBase} from "./ASBase.model"; // TODO: types // https://www.w3.org/TR/activitystreams-core/#object -export interface ObjectAPFields { +export interface ASObjectFields { id?: any; type?: any; attachment?: any; @@ -32,8 +32,8 @@ export interface ObjectAPFields { duration?: any; } -export class ObjectAP extends ModelBaseAP{ - constructor(fields: ObjectAPFields) { +export class ASObject extends ASBase{ + constructor(fields: ASObjectFields) { super(fields); } } \ No newline at end of file diff --git a/src/models/Activity.model.ts b/src/models/Activity.model.ts index c72c854..dbe93c4 100644 --- a/src/models/Activity.model.ts +++ b/src/models/Activity.model.ts @@ -1,14 +1,14 @@ -import {ModelBaseAP} from "./Base.model"; -import {IntransitiveActivityAPFields} from "./IntransitiveActivity.model"; +import {ASBase} from "./ASBase.model"; +import {IntransitiveActivityFields} from "./IntransitiveActivity.model"; // TODO: types // https://www.w3.org/TR/activitystreams-core/#activities -export interface ActivityAPFields extends IntransitiveActivityAPFields { +export interface ActivityFields extends IntransitiveActivityFields { object?: any; // Object? } -export class ActivityAP extends ModelBaseAP{ - constructor(fields: ActivityAPFields) { +export class Activity extends ASBase{ + constructor(fields: ActivityFields) { super(fields); } } \ No newline at end of file diff --git a/src/models/Actor.model.ts b/src/models/Actor.model.ts index fb17c61..f1f7cb7 100644 --- a/src/models/Actor.model.ts +++ b/src/models/Actor.model.ts @@ -1,5 +1,5 @@ -import {ModelBaseAP} from "./Base.model"; -import {ObjectAPFields} from "./Object.model"; +import {ASBase} from "./ASBase.model"; +import {ASObjectFields} from "./ASObject.model"; export enum ActorTypes { Application = 'Application', @@ -11,17 +11,12 @@ export enum ActorTypes { // TODO: types // https://www.w3.org/TR/activitystreams-core/#actors -export interface ActorAPFields extends ObjectAPFields { +export interface ActorFields extends ASObjectFields { type?: any | ActorTypes; // ? - actor?: any; // Actor? - target?: any; - origin?: any; - result?: any; - instrument?: any; } -export class ActorAP extends ModelBaseAP{ - constructor(fields: ActorAPFields) { +export class Actor extends ASBase{ + constructor(fields: ActorFields) { super(fields); } } \ No newline at end of file diff --git a/src/models/Collection.model.ts b/src/models/Collection.model.ts new file mode 100644 index 0000000..62215f0 --- /dev/null +++ b/src/models/Collection.model.ts @@ -0,0 +1,13 @@ +import {ASCollectionBase, ASCollectionBaseFields} from "./ASCollectionBase.model"; + +// TODO: types +// https://www.w3.org/TR/activitystreams-core/#collection +export interface CollectionFields extends ASCollectionBaseFields { + items?: any; // Objects? Links? +} + +export class Collection extends ASCollectionBase { + constructor(fields: CollectionFields) { + super(fields); + } +} \ No newline at end of file diff --git a/src/models/CollectionPage.model.ts b/src/models/CollectionPage.model.ts new file mode 100644 index 0000000..9600804 --- /dev/null +++ b/src/models/CollectionPage.model.ts @@ -0,0 +1,18 @@ +import {ASCollectionBase, ASCollectionBaseFields} from "./ASCollectionBase.model"; + +// TODO: types +// https://www.w3.org/TR/activitystreams-core/#collection +export interface CollectionPageFields extends ASCollectionBaseFields { + partOf?: any; + first?: any; + next?: any; + prev?: any; + last?: any; + current?: any; +} + +export class CollectionPage extends ASCollectionBase { + constructor(fields: CollectionPageFields) { + super(fields); + } +} \ No newline at end of file diff --git a/src/models/IntransitiveActivity.model.ts b/src/models/IntransitiveActivity.model.ts index b6a9540..96baf0d 100644 --- a/src/models/IntransitiveActivity.model.ts +++ b/src/models/IntransitiveActivity.model.ts @@ -1,9 +1,9 @@ -import {ModelBaseAP} from "./Base.model"; -import {ObjectAPFields} from "./Object.model"; +import {ASBase} from "./ASBase.model"; +import {ASObjectFields} from "./ASObject.model"; // TODO: types // https://www.w3.org/TR/activitystreams-core/#intransitiveactivities -export interface IntransitiveActivityAPFields extends ObjectAPFields { +export interface IntransitiveActivityFields extends ASObjectFields { actor?: any; // Actor? target?: any; origin?: any; @@ -11,8 +11,8 @@ export interface IntransitiveActivityAPFields extends ObjectAPFields { instrument?: any; } -export class IntransitiveActivityAP extends ModelBaseAP{ - constructor(fields: IntransitiveActivityAPFields) { +export class IntransitiveActivity extends ASBase{ + constructor(fields: IntransitiveActivityFields) { super(fields); } } \ No newline at end of file diff --git a/src/models/Link.model.ts b/src/models/Link.model.ts index 217d64a..fdb1fc0 100644 --- a/src/models/Link.model.ts +++ b/src/models/Link.model.ts @@ -1,8 +1,8 @@ -import {ModelBaseAP} from "./Base.model"; +import {ASBase} from "./ASBase.model"; // TODO: types // https://www.w3.org/TR/activitystreams-core/#dfn-link -export interface ObjectAPFields { +export interface LinkFields { id?: any; name?: any; hreflang?: any; @@ -12,8 +12,8 @@ export interface ObjectAPFields { width?: any; } -export class LinkAP extends ModelBaseAP{ - constructor(fields: ObjectAPFields) { +export class Link extends ASBase{ + constructor(fields: LinkFields) { super(fields); } } \ No newline at end of file diff --git a/src/models/OrderedCollection.model.ts b/src/models/OrderedCollection.model.ts new file mode 100644 index 0000000..da2b291 --- /dev/null +++ b/src/models/OrderedCollection.model.ts @@ -0,0 +1,14 @@ +import {ASCollectionBase, ASCollectionBaseFields} from "./ASCollectionBase.model"; + +// TODO: types +// https://www.w3.org/TR/activitystreams-core/#collection +export interface OrderedCollectionFields extends ASCollectionBaseFields { + orderedItems?: any; // Objects? Links? +} + +// TODO: sort method? +export class OrderedCollection extends ASCollectionBase { + constructor(fields: OrderedCollectionFields) { + super(fields); + } +} \ No newline at end of file diff --git a/src/models/OrderedCollectionPage.model.ts b/src/models/OrderedCollectionPage.model.ts new file mode 100644 index 0000000..8df62c9 --- /dev/null +++ b/src/models/OrderedCollectionPage.model.ts @@ -0,0 +1,14 @@ +import {CollectionPage, CollectionPageFields} from "./CollectionPage.model"; + +// TODO: types +// TODO: is it correct? +// https://www.w3.org/TR/activitystreams-core/#collection +export interface OrderedCollectionPageFields extends CollectionPageFields { + startIndex?: any; +} + +export class OrderedCollectionPage extends CollectionPage { + constructor(fields: OrderedCollectionPageFields) { + super(fields); + } +} \ No newline at end of file