From 7484e2b62a8ec8454efd48751adee41d5489a18b Mon Sep 17 00:00:00 2001 From: Kirill Date: Mon, 14 Nov 2022 19:26:06 +0300 Subject: [PATCH] APBase Improvements (#4) * update base model & refactor * implement proxy * update Person model * fix APBase toPlain --- package.json | 4 +- .../{common.constants.ts => constants.ts} | 0 src/common/{common.types.ts => types.ts} | 14 +++- src/common/utils.ts | 16 +++- src/index.ts | 1 - src/models/activity/Activity.model.ts | 10 +-- src/models/activity/Activity.types.ts | 2 +- src/models/actor/Actor.model.ts | 12 +-- src/models/actor/Actor.types.ts | 2 +- src/models/apBase/APBase.model.ts | 80 ++++++++++++------- src/models/apEvent/APEvent.model.ts | 10 +-- src/models/apObject/APObject.model.ts | 10 +-- src/models/apObject/APObject.types.ts | 6 +- src/models/application/Application.model.ts | 10 +-- src/models/article/Article.model.ts | 10 +-- src/models/audio/Audio.model.ts | 10 +-- src/models/collection/Collection.model.ts | 10 +-- src/models/collection/Collection.types.ts | 2 +- .../collectionPage/CollectionPage.model.ts | 10 +-- .../collectionPage/CollectionPage.types.ts | 2 +- src/models/document/Document.model.ts | 10 +-- src/models/group/Group.model.ts | 10 +-- src/models/image/Image.model.ts | 10 +-- .../IntransitiveActivity.model.ts | 10 +-- src/models/link/Link.model.ts | 10 +-- src/models/link/Link.types.ts | 4 +- src/models/mention/Mention.model.ts | 11 +-- src/models/note/Note.model.ts | 10 +-- .../OrderedCollection.model.ts | 10 +-- .../OrderedCollection.types.ts | 2 +- .../OrderedCollectionPage.model.ts | 10 +-- .../OrderedCollectionPage.types.ts | 2 +- src/models/organization/Organization.model.ts | 10 +-- src/models/page/Page.model.ts | 10 +-- src/models/person/Person.model.ts | 12 +-- src/models/place/Place.model.ts | 10 +-- src/models/place/Place.types.ts | 2 +- src/models/profile/Profile.model.ts | 10 +-- src/models/profile/Profile.types.ts | 2 +- src/models/question/Question.model.ts | 10 +-- src/models/question/Question.types.ts | 2 +- src/models/relationship/Relationship.model.ts | 10 +-- src/models/relationship/Relationship.types.ts | 2 +- src/models/service/Service.model.ts | 10 +-- src/models/tombstone/Tombstone.model.ts | 10 +-- src/models/tombstone/Tombstone.types.ts | 2 +- src/models/video/Video.model.ts | 10 +-- tsconfig.json | 2 +- 48 files changed, 239 insertions(+), 195 deletions(-) rename src/common/{common.constants.ts => constants.ts} (100%) rename src/common/{common.types.ts => types.ts} (93%) diff --git a/package.json b/package.json index e2a9209..e0c5122 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,8 @@ "scripts": { "tsc": "tsc -p ./tsconfig.json", "tsc:watch": "tsc -w -p ./tsconfig.json", - "start": "node --es-module-specifier-resolution=node build/index.js", - "start:dev": "nodemon --es-module-specifier-resolution=node build/index.js" + "start": "node --es-module-specifier-resolution=node dist/index.js", + "start:dev": "nodemon --es-module-specifier-resolution=node dist/index.js" }, "files": [ "dist" diff --git a/src/common/common.constants.ts b/src/common/constants.ts similarity index 100% rename from src/common/common.constants.ts rename to src/common/constants.ts diff --git a/src/common/common.types.ts b/src/common/types.ts similarity index 93% rename from src/common/common.types.ts rename to src/common/types.ts index abaac84..b5ac258 100644 --- a/src/common/common.types.ts +++ b/src/common/types.ts @@ -39,6 +39,7 @@ export enum ASModelType { Question = 'Question', Tombstone = 'Tombstone', Profile = 'Profile', + Actor = 'Actor', Link = 'Link', Mention = 'Mention', Collection = 'Collection', @@ -55,6 +56,7 @@ export type LanguageTag = string; export type MediaType = string; export type Duration = string; +export type ContextValue = string | Record; export type UrlValue = string | Link; export type IdValue = string; export type TypeValue = string; @@ -145,4 +147,14 @@ export type OauthAuthorizationEndpointValue = string; export type OauthTokenEndpointValue = string; export type ProvideClientKeyValue = string; export type SignClientKeyValue = string; -export type SharedInboxValue = string; \ No newline at end of file +export type SharedInboxValue = string; + +export interface WithContext { + /** + * JSON-LD uses the special @context property to define the processing context. + * The value of the @context property is defined by the [JSON-LD] specification. + * + * {@link https://www.w3.org/TR/activitystreams-core/#jsonld Docs} + */ + '@context'?: ContextValue | ContextValue[]; +} \ No newline at end of file diff --git a/src/common/utils.ts b/src/common/utils.ts index 5852d3b..2e7418c 100644 --- a/src/common/utils.ts +++ b/src/common/utils.ts @@ -1 +1,15 @@ -export type Modify = Omit & R; \ No newline at end of file +export type Modify = Omit & R; + +export const hasKey = (obj: T, k: keyof any): k is keyof T => k in obj; + +export const cloneObjDeep = (obj: T): T => { + const duplicateObj = {} as T; + for (const key in obj) { + if(typeof obj[key] === 'object') { + duplicateObj[key] = cloneObjDeep(obj[key]); + } else { + duplicateObj[key] = obj[key]; + } + } + return duplicateObj; +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 8b13789..e69de29 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +0,0 @@ - diff --git a/src/models/activity/Activity.model.ts b/src/models/activity/Activity.model.ts index 7e2ab6d..491b9ca 100644 --- a/src/models/activity/Activity.model.ts +++ b/src/models/activity/Activity.model.ts @@ -1,6 +1,6 @@ import {APBase} from "../apBase/APBase.model"; import { ActivityFields } from "./Activity.types"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; /** * An Activity is a subtype of Object that describes some form of action that may happen, @@ -11,10 +11,10 @@ import {ASModelType} from "../../common/common.types"; * {@link https://www.w3.org/ns/activitystreams#Activity Docs} */ export class Activity extends APBase{ - constructor(fields: ActivityFields) { - super({ + static create(fields: ActivityFields) { + return APBase._create({ type: ASModelType.Activity, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/activity/Activity.types.ts b/src/models/activity/Activity.types.ts index 08c906e..094dc45 100644 --- a/src/models/activity/Activity.types.ts +++ b/src/models/activity/Activity.types.ts @@ -6,7 +6,7 @@ import { OriginValue, ResultValue, TargetValue -} from "../../common/common.types"; +} from "../../common/types"; export interface ActivityFields extends APObjectFields { diff --git a/src/models/actor/Actor.model.ts b/src/models/actor/Actor.model.ts index afbc0ee..acec776 100644 --- a/src/models/actor/Actor.model.ts +++ b/src/models/actor/Actor.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {ActorFields} from "./Actor.types"; /** @@ -13,10 +13,10 @@ import {ActorFields} from "./Actor.types"; * {@link https://www.w3.org/TR/activitypub/#actors Docs} */ export class Actor extends APBase{ - constructor(fields: ActorFields) { - super({ - type: ASModelType.Profile, - ...fields - }) + static create(fields: ActorFields) { + return APBase._create({ + type: ASModelType.Actor, + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/actor/Actor.types.ts b/src/models/actor/Actor.types.ts index ac3c35e..be1edfc 100644 --- a/src/models/actor/Actor.types.ts +++ b/src/models/actor/Actor.types.ts @@ -13,7 +13,7 @@ import { ProxyUrlValue, SharedInboxValue, SignClientKeyValue, StreamsValue -} from "../../common/common.types"; +} from "../../common/types"; export interface EndpointsValue { diff --git a/src/models/apBase/APBase.model.ts b/src/models/apBase/APBase.model.ts index f381c85..8295871 100644 --- a/src/models/apBase/APBase.model.ts +++ b/src/models/apBase/APBase.model.ts @@ -1,47 +1,65 @@ -import { contexts } from "../../common/common.constants"; +import {cloneObjDeep, hasKey} from "../../common/utils"; +import { WithContext } from "../../common/types"; -// TODO: types -// TODO: renaming/refactor -export type Context = string | any[]; -export interface ModelBaseAPWithContext { - '@context'?: Context; -} +export class APBase { + public fields: T; -export class APBase { - public fields: T & ModelBaseAPWithContext; - - constructor(fields: T) { - // TODO: make recursive copy + protected constructor(fields: T) { this.fields = { - ...fields, - } as T & ModelBaseAPWithContext; + ...cloneObjDeep(fields), + }; } - // TODO: rewrite (better option to handle multiple contexts) - // some comment - public setContext(context?: Context): this { - this.fields = { - ['@context']: context || contexts.activityStreamsV2, - ...this.fields - } - return this; + protected static _create(fields: T) { + const data = new APBase(fields); + return new Proxy(data, { + get(target: APBase, p: keyof APBase & keyof T) { + return hasKey(target, p) ? target[p] : target.fields[p]; + }, + set(target: APBase, p: keyof APBase & keyof T, newValue: any): boolean { + target.fields[p] = newValue; + return true; + } + }) as APBase & T & WithContext; } - public plain(): Record { + protected parseValue(value: any): any { + return value instanceof APBase ? value.toPlain() : value.toValue(); + } + + public toPlain(): Record { const result = {} as Record; - for (const [key, node] of Object.entries(this.fields)) { - if (node instanceof APBase) { - result[key] = node.plain(); + if ('@context' in this.fields) { + result['@context'] = this.fields['@context']; + } + for (const [key, value] of Object.entries(this.fields)) { + if (key === '@context') continue; + + const isFunction = typeof value === 'function'; + const isArray = Array.isArray(value); + const isNull = value === null; + const isUndefined = value === undefined; + const isObject = !isArray && !isNull && typeof value === 'object'; + const isPlain = !isArray && !isNull && !isUndefined && !isObject && !isFunction; + + if (isArray) { + result[key] = value.map(v => this.parseValue(v)); + } else if (isNull || isUndefined) { + result[key] = null; + } else if (isObject) { + result[key] = {}; + Object.entries(value).forEach(([k, v]) => result[key][k] = this.parseValue(v)); + } else if (isPlain) { + result[key] = this.parseValue(value); } else { - result[key] = node; + throw new Error(`Unable to convert key ${key} with value ${value}. Type of value: ${typeof value}`); } } - // TODO make recursive copy return result; } - public json() { - return JSON.stringify(this.plain()); + public toJSON(): string { + return JSON.stringify(this.toPlain()); } -} \ No newline at end of file +} diff --git a/src/models/apEvent/APEvent.model.ts b/src/models/apEvent/APEvent.model.ts index b0d650b..6467fac 100644 --- a/src/models/apEvent/APEvent.model.ts +++ b/src/models/apEvent/APEvent.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {APEventFields} from "./APEvent.types"; /** @@ -8,10 +8,10 @@ import {APEventFields} from "./APEvent.types"; * {@link https://www.w3.org/ns/activitystreams#Event Docs} */ export class APEvent extends APBase{ - constructor(fields: APEventFields) { - super({ + static create(fields: APEventFields) { + return APBase._create({ type: ASModelType.Event, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/apObject/APObject.model.ts b/src/models/apObject/APObject.model.ts index 67d0a44..1e48cde 100644 --- a/src/models/apObject/APObject.model.ts +++ b/src/models/apObject/APObject.model.ts @@ -1,6 +1,6 @@ import {APBase} from "../apBase/APBase.model"; import { APObjectFields } from "./APObject.types"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; /** * Describes an object of any kind. The Object type serves as the base type for most of @@ -10,10 +10,10 @@ import {ASModelType} from "../../common/common.types"; * {@link https://www.w3.org/ns/activitystreams#Object Docs} */ export class APObject extends APBase{ - constructor(fields: APObjectFields) { - super({ + static create(fields: APObjectFields) { + return APBase._create({ type: ASModelType.Object, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/apObject/APObject.types.ts b/src/models/apObject/APObject.types.ts index 5fbdb75..0891c82 100644 --- a/src/models/apObject/APObject.types.ts +++ b/src/models/apObject/APObject.types.ts @@ -28,10 +28,10 @@ import { SummaryValue, SummaryMapValue, UpdatedValue, - DurationValue, SourceValue, LikesValue, SharesValue, -} from "../../common/common.types"; + DurationValue, SourceValue, LikesValue, SharesValue, ContextValue, WithContext, +} from "../../common/types"; -export interface APObjectFields { +export interface APObjectFields extends WithContext { /** * Provides the globally unique identifier for * an {@link https://www.w3.org/TR/activitystreams-vocabulary/#dfn-object Object} diff --git a/src/models/application/Application.model.ts b/src/models/application/Application.model.ts index 0cea4ed..c21fc7a 100644 --- a/src/models/application/Application.model.ts +++ b/src/models/application/Application.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {ApplicationFields} from "./Application.types"; /** @@ -8,10 +8,10 @@ import {ApplicationFields} from "./Application.types"; * {@link https://www.w3.org/ns/activitystreams#Application Docs} */ export class Application extends APBase{ - constructor(fields: ApplicationFields) { - super({ + static create(fields: ApplicationFields) { + return APBase._create({ type: ASModelType.Application, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/article/Article.model.ts b/src/models/article/Article.model.ts index e373536..e182ee4 100644 --- a/src/models/article/Article.model.ts +++ b/src/models/article/Article.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {ArticleFields} from "./Article.types"; /** @@ -8,10 +8,10 @@ import {ArticleFields} from "./Article.types"; * {@link https://www.w3.org/ns/activitystreams#Article Docs} */ export class Article extends APBase{ - constructor(fields: ArticleFields) { - super({ + static create(fields: ArticleFields) { + return APBase._create({ type: ASModelType.Article, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/audio/Audio.model.ts b/src/models/audio/Audio.model.ts index b77ca75..ce74973 100644 --- a/src/models/audio/Audio.model.ts +++ b/src/models/audio/Audio.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {AudioFields} from "./Audio.types"; /** @@ -8,10 +8,10 @@ import {AudioFields} from "./Audio.types"; * {@link https://www.w3.org/ns/activitystreams#Audio Docs} */ export class Audio extends APBase{ - constructor(fields: AudioFields) { - super({ + static create(fields: AudioFields) { + return APBase._create({ type: ASModelType.Audio, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/collection/Collection.model.ts b/src/models/collection/Collection.model.ts index 21ee530..db90db1 100644 --- a/src/models/collection/Collection.model.ts +++ b/src/models/collection/Collection.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {CollectionFields} from "./Collection.types"; /** @@ -9,10 +9,10 @@ import {CollectionFields} from "./Collection.types"; * {@link https://www.w3.org/ns/activitystreams#Collection Docs} */ export class Collection extends APBase{ - constructor(fields: CollectionFields) { - super({ + static create(fields: CollectionFields) { + return APBase._create({ type: ASModelType.Collection, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/collection/Collection.types.ts b/src/models/collection/Collection.types.ts index 0691fe2..ebc9177 100644 --- a/src/models/collection/Collection.types.ts +++ b/src/models/collection/Collection.types.ts @@ -4,7 +4,7 @@ import { CollectionFirstValue, CollectionItemsValue, CollectionLastValue, TotalItemsValue -} from "../../common/common.types"; +} from "../../common/types"; export interface CollectionFields extends APObjectFields { diff --git a/src/models/collectionPage/CollectionPage.model.ts b/src/models/collectionPage/CollectionPage.model.ts index b5e917e..3f4f2e2 100644 --- a/src/models/collectionPage/CollectionPage.model.ts +++ b/src/models/collectionPage/CollectionPage.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {CollectionPageFields} from "./CollectionPage.types"; /** @@ -8,10 +8,10 @@ import {CollectionPageFields} from "./CollectionPage.types"; * {@link https://www.w3.org/ns/activitystreams#CollectionPage Docs} */ export class CollectionPage extends APBase{ - constructor(fields: CollectionPageFields) { - super({ + static create(fields: CollectionPageFields) { + return APBase._create({ type: ASModelType.CollectionPage, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/collectionPage/CollectionPage.types.ts b/src/models/collectionPage/CollectionPage.types.ts index d9427fb..2f1f55d 100644 --- a/src/models/collectionPage/CollectionPage.types.ts +++ b/src/models/collectionPage/CollectionPage.types.ts @@ -1,5 +1,5 @@ import {CollectionFields} from "../collection/Collection.types"; -import {CollectionPageNextValue, CollectionPagePartOfValue, CollectionPagePrevValue} from "../../common/common.types"; +import {CollectionPageNextValue, CollectionPagePartOfValue, CollectionPagePrevValue} from "../../common/types"; export interface CollectionPageFields extends CollectionFields { diff --git a/src/models/document/Document.model.ts b/src/models/document/Document.model.ts index 5edf538..474bb03 100644 --- a/src/models/document/Document.model.ts +++ b/src/models/document/Document.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {DocumentFields} from "./Document.types"; /** @@ -8,10 +8,10 @@ import {DocumentFields} from "./Document.types"; * {@link https://www.w3.org/ns/activitystreams#Document Docs} */ export class Document extends APBase{ - constructor(fields: DocumentFields) { - super({ + static create(fields: DocumentFields) { + return APBase._create({ type: ASModelType.Document, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/group/Group.model.ts b/src/models/group/Group.model.ts index ff99c5b..c8081b8 100644 --- a/src/models/group/Group.model.ts +++ b/src/models/group/Group.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {GroupFields} from "./Group.types"; /** @@ -8,10 +8,10 @@ import {GroupFields} from "./Group.types"; * {@link https://www.w3.org/ns/activitystreams#Group Docs} */ export class Group extends APBase{ - constructor(fields: GroupFields) { - super({ + static create(fields: GroupFields) { + return APBase._create({ type: ASModelType.Group, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/image/Image.model.ts b/src/models/image/Image.model.ts index 58234ab..bbe3987 100644 --- a/src/models/image/Image.model.ts +++ b/src/models/image/Image.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {ImageFields} from "./Image.types"; /** @@ -8,10 +8,10 @@ import {ImageFields} from "./Image.types"; * {@link https://www.w3.org/ns/activitystreams#Image Docs} */ export class Image extends APBase{ - constructor(fields: ImageFields) { - super({ + static create(fields: ImageFields) { + return APBase._create({ type: ASModelType.Image, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/intransitiveActivity/IntransitiveActivity.model.ts b/src/models/intransitiveActivity/IntransitiveActivity.model.ts index 2bc7821..a351119 100644 --- a/src/models/intransitiveActivity/IntransitiveActivity.model.ts +++ b/src/models/intransitiveActivity/IntransitiveActivity.model.ts @@ -1,6 +1,6 @@ import {APBase} from "../apBase/APBase.model"; import {IntransitiveActivityFields} from './IntransitiveActivity.types'; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; /** * Instances of intransitiveActivity are a subtype of @@ -10,10 +10,10 @@ import {ASModelType} from "../../common/common.types"; * {@link https://www.w3.org/ns/activitystreams#IntransitiveActivity Docs} */ export class IntransitiveActivity extends APBase{ - constructor(fields: IntransitiveActivityFields) { - super({ + static create(fields: IntransitiveActivityFields) { + return APBase._create({ type: ASModelType.Activity, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/link/Link.model.ts b/src/models/link/Link.model.ts index b488cfa..a43029d 100644 --- a/src/models/link/Link.model.ts +++ b/src/models/link/Link.model.ts @@ -1,6 +1,6 @@ import {APBase} from "../apBase/APBase.model"; import { LinkFields } from "./Link.types"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; /** * A Link is an indirect, qualified reference to a resource identified by a URL. @@ -13,10 +13,10 @@ import {ASModelType} from "../../common/common.types"; * {@link https://www.w3.org/ns/activitystreams#Link Docs} */ export class Link extends APBase{ - constructor(fields: LinkFields) { - super({ + static create(fields: LinkFields) { + return APBase._create({ type: ASModelType.Link, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/link/Link.types.ts b/src/models/link/Link.types.ts index 485b7b0..83fe485 100644 --- a/src/models/link/Link.types.ts +++ b/src/models/link/Link.types.ts @@ -2,14 +2,14 @@ import { HeightValue, HreflangValue, HrefValue, - IdValue, MediaTypeValue, NameMapValue, NameValue, PreviewValue, RelValue, TypeValue, WidthValue -} from "../../common/common.types"; +} from "../../common/types"; export interface LinkFields { + '@context': never; /** * Identifies the {@link https://www.w3.org/TR/activitystreams-vocabulary/#dfn-object Object} diff --git a/src/models/mention/Mention.model.ts b/src/models/mention/Mention.model.ts index 1a09a33..cb13596 100644 --- a/src/models/mention/Mention.model.ts +++ b/src/models/mention/Mention.model.ts @@ -1,16 +1,17 @@ import {APBase} from "../apBase/APBase.model"; import {MentionFields} from "./Mention.types"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; + /** * A specialized Link that represents an @mention. * * {@link https://www.w3.org/ns/activitystreams#Mention Docs} */ export class Mention extends APBase{ - constructor(fields: MentionFields) { - super({ + static create(fields: MentionFields) { + return APBase._create({ type: ASModelType.Mention, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/note/Note.model.ts b/src/models/note/Note.model.ts index 8174329..914149e 100644 --- a/src/models/note/Note.model.ts +++ b/src/models/note/Note.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {NoteFields} from "./Note.types"; /** @@ -8,10 +8,10 @@ import {NoteFields} from "./Note.types"; * {@link https://www.w3.org/ns/activitystreams#Note Docs} */ export class Note extends APBase{ - constructor(fields: NoteFields) { - super({ + static create(fields: NoteFields) { + return APBase._create({ type: ASModelType.Note, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/orderedCollection/OrderedCollection.model.ts b/src/models/orderedCollection/OrderedCollection.model.ts index bf28b72..d66cfde 100644 --- a/src/models/orderedCollection/OrderedCollection.model.ts +++ b/src/models/orderedCollection/OrderedCollection.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {OrderedCollectionFields} from "./OrderedCollection.types"; /** @@ -9,10 +9,10 @@ import {OrderedCollectionFields} from "./OrderedCollection.types"; * {@link https://www.w3.org/ns/activitystreams#OrderedCollection Docs} */ export class OrderedCollection extends APBase{ - constructor(fields: OrderedCollectionFields) { - super({ + static create(fields: OrderedCollectionFields) { + return APBase._create({ type: ASModelType.OrderedCollection, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/orderedCollection/OrderedCollection.types.ts b/src/models/orderedCollection/OrderedCollection.types.ts index 62f9a19..17db83d 100644 --- a/src/models/orderedCollection/OrderedCollection.types.ts +++ b/src/models/orderedCollection/OrderedCollection.types.ts @@ -2,7 +2,7 @@ import { OrderedCollectionCurrentValue, OrderedCollectionFirstValue, OrderedCollectionItemsValue, OrderedCollectionLastValue -} from "../../common/common.types"; +} from "../../common/types"; import {CollectionFields} from "../collection/Collection.types"; import {Modify} from "../../common/utils"; diff --git a/src/models/orderedCollectionPage/OrderedCollectionPage.model.ts b/src/models/orderedCollectionPage/OrderedCollectionPage.model.ts index 5b2e92c..54ccae0 100644 --- a/src/models/orderedCollectionPage/OrderedCollectionPage.model.ts +++ b/src/models/orderedCollectionPage/OrderedCollectionPage.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {OrderedCollectionPageFields} from "./OrderedCollectionPage.types"; /** @@ -8,10 +8,10 @@ import {OrderedCollectionPageFields} from "./OrderedCollectionPage.types"; * {@link https://www.w3.org/ns/activitystreams#OrderedCollectionPage Docs} */ export class OrderedCollectionPage extends APBase{ - constructor(fields: OrderedCollectionPageFields) { - super({ + static create(fields: OrderedCollectionPageFields) { + return APBase._create({ type: ASModelType.OrderedCollectionPage, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/orderedCollectionPage/OrderedCollectionPage.types.ts b/src/models/orderedCollectionPage/OrderedCollectionPage.types.ts index 8e90d22..b8ddcab 100644 --- a/src/models/orderedCollectionPage/OrderedCollectionPage.types.ts +++ b/src/models/orderedCollectionPage/OrderedCollectionPage.types.ts @@ -4,7 +4,7 @@ import { OrderedCollectionPagePartOfValue, OrderedCollectionPagePrevValue, StartIndexValue -} from "../../common/common.types"; +} from "../../common/types"; import {CollectionPageFields} from "../collectionPage/CollectionPage.types"; import {Modify} from "../../common/utils"; diff --git a/src/models/organization/Organization.model.ts b/src/models/organization/Organization.model.ts index f02315d..ada9070 100644 --- a/src/models/organization/Organization.model.ts +++ b/src/models/organization/Organization.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {OrganizationFields} from "./Organization.types"; /** @@ -8,10 +8,10 @@ import {OrganizationFields} from "./Organization.types"; * {@link https://www.w3.org/ns/activitystreams#Organization Docs} */ export class Organization extends APBase{ - constructor(fields: OrganizationFields) { - super({ + static create(fields: OrganizationFields) { + return APBase._create({ type: ASModelType.Organization, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/page/Page.model.ts b/src/models/page/Page.model.ts index 34350a8..d0f4a17 100644 --- a/src/models/page/Page.model.ts +++ b/src/models/page/Page.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {PageFields} from "./Page.types"; /** @@ -8,10 +8,10 @@ import {PageFields} from "./Page.types"; * {@link https://www.w3.org/ns/activitystreams#Page Docs} */ export class Page extends APBase{ - constructor(fields: PageFields) { - super({ + static create(fields: PageFields) { + return APBase._create({ type: ASModelType.Page, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/person/Person.model.ts b/src/models/person/Person.model.ts index c47aa53..f162a50 100644 --- a/src/models/person/Person.model.ts +++ b/src/models/person/Person.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {PersonFields} from "./Person.types"; /** @@ -8,10 +8,10 @@ import {PersonFields} from "./Person.types"; * {@link https://www.w3.org/ns/activitystreams#Person Docs} */ export class Person extends APBase{ - constructor(fields: PersonFields) { - super({ + static create(fields: PersonFields) { + return APBase._create({ type: ASModelType.Person, - ...fields - }) + ...fields, + }); } -} \ No newline at end of file +} diff --git a/src/models/place/Place.model.ts b/src/models/place/Place.model.ts index f874463..64be315 100644 --- a/src/models/place/Place.model.ts +++ b/src/models/place/Place.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {PlaceFields} from "./Place.types"; /** @@ -10,10 +10,10 @@ import {PlaceFields} from "./Place.types"; * {@link https://www.w3.org/ns/activitystreams#Place Docs} */ export class Place extends APBase{ - constructor(fields: PlaceFields) { - super({ + static create(fields: PlaceFields) { + return APBase._create({ type: ASModelType.Place, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/place/Place.types.ts b/src/models/place/Place.types.ts index 9223392..c3c161d 100644 --- a/src/models/place/Place.types.ts +++ b/src/models/place/Place.types.ts @@ -6,7 +6,7 @@ import { LongitudeValue, RadiusValue, UnitsValue -} from "../../common/common.types"; +} from "../../common/types"; export interface PlaceFields extends APObjectFields { diff --git a/src/models/profile/Profile.model.ts b/src/models/profile/Profile.model.ts index c995b46..2956559 100644 --- a/src/models/profile/Profile.model.ts +++ b/src/models/profile/Profile.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {ProfileFields} from "./Profile.types"; /** @@ -10,10 +10,10 @@ import {ProfileFields} from "./Profile.types"; * {@link https://www.w3.org/ns/activitystreams#Profile Docs} */ export class Profile extends APBase{ - constructor(fields: ProfileFields) { - super({ + static create(fields: ProfileFields) { + return APBase._create({ type: ASModelType.Profile, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/profile/Profile.types.ts b/src/models/profile/Profile.types.ts index 3199bdc..29897b8 100644 --- a/src/models/profile/Profile.types.ts +++ b/src/models/profile/Profile.types.ts @@ -1,6 +1,6 @@ import {APObjectFields} from "../apObject/APObject.types"; -import {DescribesValue} from "../../common/common.types"; +import {DescribesValue} from "../../common/types"; export interface ProfileFields extends APObjectFields { diff --git a/src/models/question/Question.model.ts b/src/models/question/Question.model.ts index 55016ab..fe12f2c 100644 --- a/src/models/question/Question.model.ts +++ b/src/models/question/Question.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {QuestionFields} from "./Question.types"; /** @@ -14,10 +14,10 @@ import {QuestionFields} from "./Question.types"; * {@link https://www.w3.org/ns/activitystreams#Question Docs} */ export class Question extends APBase{ - constructor(fields: QuestionFields) { - super({ + static create(fields: QuestionFields) { + return APBase._create({ type: ASModelType.Question, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/question/Question.types.ts b/src/models/question/Question.types.ts index c19d045..e3c9e25 100644 --- a/src/models/question/Question.types.ts +++ b/src/models/question/Question.types.ts @@ -1,5 +1,5 @@ import {IntransitiveActivityFields} from "../intransitiveActivity/IntransitiveActivity.types"; -import {AnyOfValue, ClosedValue, OneOfValue} from "../../common/common.types"; +import {AnyOfValue, ClosedValue, OneOfValue} from "../../common/types"; export interface QuestionFields extends IntransitiveActivityFields { diff --git a/src/models/relationship/Relationship.model.ts b/src/models/relationship/Relationship.model.ts index e9b1540..b7bf7f0 100644 --- a/src/models/relationship/Relationship.model.ts +++ b/src/models/relationship/Relationship.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {RelationshipFields} from "./Relationship.types"; /** @@ -11,10 +11,10 @@ import {RelationshipFields} from "./Relationship.types"; * {@link https://www.w3.org/ns/activitystreams#Relationship Docs} */ export class Relationship extends APBase{ - constructor(fields: RelationshipFields) { - super({ + static create(fields: RelationshipFields) { + return APBase._create({ type: ASModelType.Relationship, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/relationship/Relationship.types.ts b/src/models/relationship/Relationship.types.ts index 0cbac3c..0a484f2 100644 --- a/src/models/relationship/Relationship.types.ts +++ b/src/models/relationship/Relationship.types.ts @@ -1,5 +1,5 @@ import {APObjectFields} from "../apObject/APObject.types"; -import {SubjectValue, ObjectValue, RelationshipValue} from "../../common/common.types"; +import {SubjectValue, ObjectValue, RelationshipValue} from "../../common/types"; export interface RelationshipFields extends APObjectFields { diff --git a/src/models/service/Service.model.ts b/src/models/service/Service.model.ts index 484dfa5..68635c2 100644 --- a/src/models/service/Service.model.ts +++ b/src/models/service/Service.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {ServiceFields} from "./Service.types"; /** @@ -8,10 +8,10 @@ import {ServiceFields} from "./Service.types"; * {@link https://www.w3.org/ns/activitystreams#Service Docs} */ export class Service extends APBase{ - constructor(fields: ServiceFields) { - super({ + static create(fields: ServiceFields) { + return APBase._create({ type: ASModelType.Service, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/tombstone/Tombstone.model.ts b/src/models/tombstone/Tombstone.model.ts index 347a2a4..8c25e2e 100644 --- a/src/models/tombstone/Tombstone.model.ts +++ b/src/models/tombstone/Tombstone.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {TombstoneFields} from "./Tombstone.types"; /** @@ -10,10 +10,10 @@ import {TombstoneFields} from "./Tombstone.types"; * {@link https://www.w3.org/ns/activitystreams#Tombstone Docs} */ export class Tombstone extends APBase{ - constructor(fields: TombstoneFields) { - super({ + static create(fields: TombstoneFields) { + return APBase._create({ type: ASModelType.Tombstone, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/src/models/tombstone/Tombstone.types.ts b/src/models/tombstone/Tombstone.types.ts index 5831276..b6614cf 100644 --- a/src/models/tombstone/Tombstone.types.ts +++ b/src/models/tombstone/Tombstone.types.ts @@ -1,4 +1,4 @@ -import {DeletedValue, FormerTypeValue} from "../../common/common.types"; +import {DeletedValue, FormerTypeValue} from "../../common/types"; import {APObjectFields} from "../apObject/APObject.types"; export interface TombstoneFields extends APObjectFields { diff --git a/src/models/video/Video.model.ts b/src/models/video/Video.model.ts index f8080d8..59330cc 100644 --- a/src/models/video/Video.model.ts +++ b/src/models/video/Video.model.ts @@ -1,5 +1,5 @@ import {APBase} from "../apBase/APBase.model"; -import {ASModelType} from "../../common/common.types"; +import {ASModelType} from "../../common/types"; import {VideoFields} from "./Video.types"; /** @@ -8,10 +8,10 @@ import {VideoFields} from "./Video.types"; * {@link https://www.w3.org/ns/activitystreams#Video Docs} */ export class Video extends APBase{ - constructor(fields: VideoFields) { - super({ + static create(fields: VideoFields) { + return APBase._create({ type: ASModelType.Video, - ...fields - }) + ...fields, + }); } } \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index baddab4..5438e9c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "outDir": "./dist", "declaration": true, - "target": "es2016", + "target": "es2017", "module": "ES6", "moduleResolution": "Node", "esModuleInterop": true,