update base model & refactor

pull/4/head
SiRanWeb 2022-11-06 23:36:13 +03:00
rodzic 1be5e6a340
commit b806943b70
45 zmienionych plików z 91 dodań i 66 usunięć

Wyświetl plik

@ -55,6 +55,7 @@ export type LanguageTag = string;
export type MediaType = string; export type MediaType = string;
export type Duration = string; export type Duration = string;
export type ContextValue = string | Record<string, string>;
export type UrlValue = string | Link; export type UrlValue = string | Link;
export type IdValue = string; export type IdValue = string;
export type TypeValue = string; export type TypeValue = string;

Wyświetl plik

@ -1 +1,13 @@
export type Modify<T, R> = Omit<T, keyof R> & R; export type Modify<T, R> = Omit<T, keyof R> & R;
export const cloneObjDeep = <T>(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;
}

Wyświetl plik

@ -1,6 +1,6 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import { ActivityFields } from "./Activity.types"; 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, * An Activity is a subtype of Object that describes some form of action that may happen,

Wyświetl plik

@ -6,7 +6,7 @@ import {
OriginValue, OriginValue,
ResultValue, ResultValue,
TargetValue TargetValue
} from "../../common/common.types"; } from "../../common/types";
export interface ActivityFields extends APObjectFields { export interface ActivityFields extends APObjectFields {

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {ActorFields} from "./Actor.types"; import {ActorFields} from "./Actor.types";
/** /**

Wyświetl plik

@ -13,7 +13,7 @@ import {
ProxyUrlValue, SharedInboxValue, ProxyUrlValue, SharedInboxValue,
SignClientKeyValue, SignClientKeyValue,
StreamsValue StreamsValue
} from "../../common/common.types"; } from "../../common/types";
export interface EndpointsValue { export interface EndpointsValue {

Wyświetl plik

@ -1,26 +1,26 @@
import { contexts } from "../../common/common.constants"; import { contexts } from "../../common/constants";
import { ContextValue } from "../../common/types";
import { cloneObjDeep } from "../../common/utils";
// TODO: types interface ContextField {
// TODO: renaming/refactor '@context'?: ContextValue | ContextValue[];
export type Context = string | any[];
export interface ModelBaseAPWithContext {
'@context'?: Context;
} }
export class APBase<T> { export class APBase<T> {
public fields: T & ModelBaseAPWithContext; public fields: T & ContextField;
constructor(fields: T) { constructor(fields: T & ContextField) {
// TODO: make recursive copy const obj = cloneObjDeep<T & ContextField>(fields);
this.fields = { this.fields = {
...fields, ...obj,
} as T & ModelBaseAPWithContext; } as T & ContextField;
} }
// TODO: rewrite (better option to handle multiple contexts) private parseValue(value: any): any {
// some comment return value instanceof APBase ? value.toPlain() : value;
public setContext(context?: Context): this { }
public withContext(context?: ContextValue): this {
this.fields = { this.fields = {
['@context']: context || contexts.activityStreamsV2, ['@context']: context || contexts.activityStreamsV2,
...this.fields ...this.fields
@ -28,20 +28,33 @@ export class APBase<T> {
return this; return this;
} }
public plain(): Record<string, any> { public toPlain(): Record<string, any> {
const result = {} as Record<string, any>; const result = {} as Record<string, any>;
for (const [key, node] of Object.entries(this.fields)) { for (const [key, value] of Object.entries(this.fields)) {
if (node instanceof APBase) { const isFunction = typeof value === 'function';
result[key] = node.plain(); 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 { } 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; return result;
} }
public json() { public toJSON(): string {
return JSON.stringify(this.plain()); return JSON.stringify(this.toPlain());
} }
} }

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {APEventFields} from "./APEvent.types"; import {APEventFields} from "./APEvent.types";
/** /**

Wyświetl plik

@ -1,6 +1,6 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import { APObjectFields } from "./APObject.types"; 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 * Describes an object of any kind. The Object type serves as the base type for most of

Wyświetl plik

@ -29,7 +29,7 @@ import {
SummaryMapValue, SummaryMapValue,
UpdatedValue, UpdatedValue,
DurationValue, SourceValue, LikesValue, SharesValue, DurationValue, SourceValue, LikesValue, SharesValue,
} from "../../common/common.types"; } from "../../common/types";
export interface APObjectFields { export interface APObjectFields {
/** /**

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {ApplicationFields} from "./Application.types"; import {ApplicationFields} from "./Application.types";
/** /**

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {ArticleFields} from "./Article.types"; import {ArticleFields} from "./Article.types";
/** /**

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {AudioFields} from "./Audio.types"; import {AudioFields} from "./Audio.types";
/** /**

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {CollectionFields} from "./Collection.types"; import {CollectionFields} from "./Collection.types";
/** /**

Wyświetl plik

@ -4,7 +4,7 @@ import {
CollectionFirstValue, CollectionItemsValue, CollectionFirstValue, CollectionItemsValue,
CollectionLastValue, CollectionLastValue,
TotalItemsValue TotalItemsValue
} from "../../common/common.types"; } from "../../common/types";
export interface CollectionFields extends APObjectFields { export interface CollectionFields extends APObjectFields {

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {CollectionPageFields} from "./CollectionPage.types"; import {CollectionPageFields} from "./CollectionPage.types";
/** /**

Wyświetl plik

@ -1,5 +1,5 @@
import {CollectionFields} from "../collection/Collection.types"; 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 { export interface CollectionPageFields extends CollectionFields {

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {DocumentFields} from "./Document.types"; import {DocumentFields} from "./Document.types";
/** /**

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {GroupFields} from "./Group.types"; import {GroupFields} from "./Group.types";
/** /**

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {ImageFields} from "./Image.types"; import {ImageFields} from "./Image.types";
/** /**

Wyświetl plik

@ -1,6 +1,6 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {IntransitiveActivityFields} from './IntransitiveActivity.types'; import {IntransitiveActivityFields} from './IntransitiveActivity.types';
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
/** /**
* Instances of intransitiveActivity are a subtype of * Instances of intransitiveActivity are a subtype of

Wyświetl plik

@ -1,6 +1,6 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import { LinkFields } from "./Link.types"; 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. * A Link is an indirect, qualified reference to a resource identified by a URL.

Wyświetl plik

@ -2,12 +2,11 @@ import {
HeightValue, HeightValue,
HreflangValue, HreflangValue,
HrefValue, HrefValue,
IdValue,
MediaTypeValue, MediaTypeValue,
NameMapValue, NameMapValue,
NameValue, PreviewValue, NameValue, PreviewValue,
RelValue, TypeValue, WidthValue RelValue, TypeValue, WidthValue
} from "../../common/common.types"; } from "../../common/types";
export interface LinkFields { export interface LinkFields {

Wyświetl plik

@ -1,6 +1,6 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {MentionFields} from "./Mention.types"; import {MentionFields} from "./Mention.types";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
/** /**
* A specialized Link that represents an @mention. * A specialized Link that represents an @mention.
* *

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {NoteFields} from "./Note.types"; import {NoteFields} from "./Note.types";
/** /**

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {OrderedCollectionFields} from "./OrderedCollection.types"; import {OrderedCollectionFields} from "./OrderedCollection.types";
/** /**

Wyświetl plik

@ -2,7 +2,7 @@ import {
OrderedCollectionCurrentValue, OrderedCollectionCurrentValue,
OrderedCollectionFirstValue, OrderedCollectionItemsValue, OrderedCollectionFirstValue, OrderedCollectionItemsValue,
OrderedCollectionLastValue OrderedCollectionLastValue
} from "../../common/common.types"; } from "../../common/types";
import {CollectionFields} from "../collection/Collection.types"; import {CollectionFields} from "../collection/Collection.types";
import {Modify} from "../../common/utils"; import {Modify} from "../../common/utils";

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {OrderedCollectionPageFields} from "./OrderedCollectionPage.types"; import {OrderedCollectionPageFields} from "./OrderedCollectionPage.types";
/** /**

Wyświetl plik

@ -4,7 +4,7 @@ import {
OrderedCollectionPagePartOfValue, OrderedCollectionPagePartOfValue,
OrderedCollectionPagePrevValue, OrderedCollectionPagePrevValue,
StartIndexValue StartIndexValue
} from "../../common/common.types"; } from "../../common/types";
import {CollectionPageFields} from "../collectionPage/CollectionPage.types"; import {CollectionPageFields} from "../collectionPage/CollectionPage.types";
import {Modify} from "../../common/utils"; import {Modify} from "../../common/utils";

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {OrganizationFields} from "./Organization.types"; import {OrganizationFields} from "./Organization.types";
/** /**

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {PageFields} from "./Page.types"; import {PageFields} from "./Page.types";
/** /**

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {PersonFields} from "./Person.types"; import {PersonFields} from "./Person.types";
/** /**

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {PlaceFields} from "./Place.types"; import {PlaceFields} from "./Place.types";
/** /**

Wyświetl plik

@ -6,7 +6,7 @@ import {
LongitudeValue, LongitudeValue,
RadiusValue, RadiusValue,
UnitsValue UnitsValue
} from "../../common/common.types"; } from "../../common/types";
export interface PlaceFields extends APObjectFields { export interface PlaceFields extends APObjectFields {

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {ProfileFields} from "./Profile.types"; import {ProfileFields} from "./Profile.types";
/** /**

Wyświetl plik

@ -1,6 +1,6 @@
import {APObjectFields} from "../apObject/APObject.types"; import {APObjectFields} from "../apObject/APObject.types";
import {DescribesValue} from "../../common/common.types"; import {DescribesValue} from "../../common/types";
export interface ProfileFields extends APObjectFields { export interface ProfileFields extends APObjectFields {

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {QuestionFields} from "./Question.types"; import {QuestionFields} from "./Question.types";
/** /**

Wyświetl plik

@ -1,5 +1,5 @@
import {IntransitiveActivityFields} from "../intransitiveActivity/IntransitiveActivity.types"; 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 { export interface QuestionFields extends IntransitiveActivityFields {

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {RelationshipFields} from "./Relationship.types"; import {RelationshipFields} from "./Relationship.types";
/** /**

Wyświetl plik

@ -1,5 +1,5 @@
import {APObjectFields} from "../apObject/APObject.types"; 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 { export interface RelationshipFields extends APObjectFields {

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {ServiceFields} from "./Service.types"; import {ServiceFields} from "./Service.types";
/** /**

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {TombstoneFields} from "./Tombstone.types"; import {TombstoneFields} from "./Tombstone.types";
/** /**

Wyświetl plik

@ -1,4 +1,4 @@
import {DeletedValue, FormerTypeValue} from "../../common/common.types"; import {DeletedValue, FormerTypeValue} from "../../common/types";
import {APObjectFields} from "../apObject/APObject.types"; import {APObjectFields} from "../apObject/APObject.types";
export interface TombstoneFields extends APObjectFields { export interface TombstoneFields extends APObjectFields {

Wyświetl plik

@ -1,5 +1,5 @@
import {APBase} from "../apBase/APBase.model"; import {APBase} from "../apBase/APBase.model";
import {ASModelType} from "../../common/common.types"; import {ASModelType} from "../../common/types";
import {VideoFields} from "./Video.types"; import {VideoFields} from "./Video.types";
/** /**