@fedify/fedify 0.11.0-dev.258 → 0.11.0-dev.259

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGES.md CHANGED
@@ -183,6 +183,7 @@ To be released.
183
183
  [#76]: https://github.com/dahlia/fedify/pull/76
184
184
  [#78]: https://github.com/dahlia/fedify/issues/78
185
185
  [#79]: https://github.com/dahlia/fedify/issues/79
186
+ [#80]: https://github.com/dahlia/fedify/pull/80
186
187
 
187
188
 
188
189
  Version 0.10.0
@@ -16,6 +16,17 @@ defaultContext:
16
16
  Hashtag: "as:Hashtag"
17
17
 
18
18
  properties:
19
+ - pluralName: items
20
+ singularName: item
21
+ uri: "https://www.w3.org/ns/activitystreams#items"
22
+ container: list
23
+ description: |
24
+ Identifies the items contained in a collection. The items might be ordered
25
+ or unordered.
26
+ range:
27
+ - "https://www.w3.org/ns/activitystreams#Object"
28
+ - "https://www.w3.org/ns/activitystreams#Link"
29
+
19
30
  - singularName: startIndex
20
31
  functional: true
21
32
  uri: "https://www.w3.org/ns/activitystreams#startIndex"
@@ -17654,6 +17654,7 @@ export class OrderedCollectionPage extends CollectionPage {
17654
17654
  static get typeId() {
17655
17655
  return new URL("https://www.w3.org/ns/activitystreams#OrderedCollectionPage");
17656
17656
  }
17657
+ #_2JPCKWTcfBmTCcW8Tv3TpRaLVaqg = [];
17657
17658
  #_2W4yinFwqmpneu2h4m1mZ3pcLADd = [];
17658
17659
  /**
17659
17660
  * Constructs a new instance of OrderedCollectionPage with the given values.
@@ -17662,6 +17663,17 @@ export class OrderedCollectionPage extends CollectionPage {
17662
17663
  */
17663
17664
  constructor(values, { documentLoader, contextLoader, } = {}) {
17664
17665
  super(values, { documentLoader, contextLoader });
17666
+ if ("items" in values && values.items != null) {
17667
+ if (Array.isArray(values.items) &&
17668
+ values.items.every((v) => v instanceof Object || v instanceof Link || v instanceof URL)) {
17669
+ // @ts-ignore: type is checked above.
17670
+ this.#_2JPCKWTcfBmTCcW8Tv3TpRaLVaqg = values.items;
17671
+ }
17672
+ else {
17673
+ throw new TypeError("The items must be an array of type " +
17674
+ "Object | Link | URL" + ".");
17675
+ }
17676
+ }
17665
17677
  if ("startIndex" in values && values.startIndex != null) {
17666
17678
  if (typeof values.startIndex === "number" &&
17667
17679
  Number.isInteger(values.startIndex) && values.startIndex >= 0) {
@@ -17682,6 +17694,18 @@ export class OrderedCollectionPage extends CollectionPage {
17682
17694
  */
17683
17695
  clone(values = {}, options = {}) {
17684
17696
  const clone = super.clone(values, options);
17697
+ clone.#_2JPCKWTcfBmTCcW8Tv3TpRaLVaqg = this.#_2JPCKWTcfBmTCcW8Tv3TpRaLVaqg;
17698
+ if ("items" in values && values.items != null) {
17699
+ if (Array.isArray(values.items) &&
17700
+ values.items.every((v) => v instanceof Object || v instanceof Link || v instanceof URL)) {
17701
+ // @ts-ignore: type is checked above.
17702
+ clone.#_2JPCKWTcfBmTCcW8Tv3TpRaLVaqg = values.items;
17703
+ }
17704
+ else {
17705
+ throw new TypeError("The items must be an array of type " +
17706
+ "Object | Link | URL" + ".");
17707
+ }
17708
+ }
17685
17709
  clone.#_2W4yinFwqmpneu2h4m1mZ3pcLADd = this.#_2W4yinFwqmpneu2h4m1mZ3pcLADd;
17686
17710
  if ("startIndex" in values && values.startIndex != null) {
17687
17711
  if (typeof values.startIndex === "number" &&
@@ -17696,6 +17720,69 @@ export class OrderedCollectionPage extends CollectionPage {
17696
17720
  }
17697
17721
  return clone;
17698
17722
  }
17723
+ async #fetchItem(url, options = {}) {
17724
+ const documentLoader = options.documentLoader ?? this._documentLoader ??
17725
+ fetchDocumentLoader;
17726
+ const contextLoader = options.contextLoader ?? this._contextLoader ??
17727
+ fetchDocumentLoader;
17728
+ let fetchResult;
17729
+ try {
17730
+ fetchResult = await documentLoader(url.href);
17731
+ }
17732
+ catch (error) {
17733
+ if (options.suppressError) {
17734
+ getLogger(["fedify", "vocab"]).error("Failed to fetch {url}: {error}", { error, url: url.href });
17735
+ return null;
17736
+ }
17737
+ throw error;
17738
+ }
17739
+ const { document } = fetchResult;
17740
+ try {
17741
+ return await Object.fromJsonLd(document, { documentLoader, contextLoader });
17742
+ }
17743
+ catch (e) {
17744
+ if (!(e instanceof TypeError))
17745
+ throw e;
17746
+ }
17747
+ try {
17748
+ return await Link.fromJsonLd(document, { documentLoader, contextLoader });
17749
+ }
17750
+ catch (e) {
17751
+ if (!(e instanceof TypeError))
17752
+ throw e;
17753
+ }
17754
+ throw new TypeError("Expected an object of any type of: " +
17755
+ [
17756
+ "https://www.w3.org/ns/activitystreams#Object",
17757
+ "https://www.w3.org/ns/activitystreams#Link",
17758
+ ].join(", "));
17759
+ }
17760
+ /**
17761
+ * Similar to
17762
+ * {@link OrderedCollectionPage.getItems},
17763
+ * but returns their `@id`s instead of the objects themselves.
17764
+ */
17765
+ get itemIds() {
17766
+ return this.#_2JPCKWTcfBmTCcW8Tv3TpRaLVaqg.map((v) => v instanceof URL ? v : v.id).filter((id) => id !== null);
17767
+ }
17768
+ /** Identifies the items contained in a collection. The items might be ordered
17769
+ * or unordered.
17770
+ */
17771
+ async *getItems(options = {}) {
17772
+ const vs = this.#_2JPCKWTcfBmTCcW8Tv3TpRaLVaqg;
17773
+ for (let i = 0; i < vs.length; i++) {
17774
+ const v = vs[i];
17775
+ if (v instanceof URL) {
17776
+ const fetched = await this.#fetchItem(v, options);
17777
+ if (fetched == null)
17778
+ continue;
17779
+ vs[i] = fetched;
17780
+ yield fetched;
17781
+ continue;
17782
+ }
17783
+ yield v;
17784
+ }
17785
+ }
17699
17786
  /** A non-negative integer value identifying the relative position within
17700
17787
  * the logical view of a strictly ordered collection.
17701
17788
  */
@@ -17721,6 +17808,20 @@ export class OrderedCollectionPage extends CollectionPage {
17721
17808
  });
17722
17809
  const values = baseValues[0];
17723
17810
  array = [];
17811
+ for (const v of this.#_2JPCKWTcfBmTCcW8Tv3TpRaLVaqg) {
17812
+ const element = v instanceof URL
17813
+ ? { "@id": v.href }
17814
+ : v instanceof Object
17815
+ ? await v.toJsonLd(options)
17816
+ : await v.toJsonLd(options);
17817
+ array.push(element);
17818
+ }
17819
+ if (array.length > 0) {
17820
+ values["https://www.w3.org/ns/activitystreams#items"] = {
17821
+ "@list": array,
17822
+ };
17823
+ }
17824
+ array = [];
17724
17825
  for (const v of this.#_2W4yinFwqmpneu2h4m1mZ3pcLADd) {
17725
17826
  const element = {
17726
17827
  "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger",
@@ -17791,6 +17892,87 @@ export class OrderedCollectionPage extends CollectionPage {
17791
17892
  if (!(instance instanceof OrderedCollectionPage)) {
17792
17893
  throw new TypeError("Unexpected type: " + instance.constructor.name);
17793
17894
  }
17895
+ const _2JPCKWTcfBmTCcW8Tv3TpRaLVaqg = [];
17896
+ const _2JPCKWTcfBmTCcW8Tv3TpRaLVaqg__array = values["https://www.w3.org/ns/activitystreams#items"];
17897
+ for (const v of _2JPCKWTcfBmTCcW8Tv3TpRaLVaqg__array == null
17898
+ ? []
17899
+ : _2JPCKWTcfBmTCcW8Tv3TpRaLVaqg__array.length === 1 &&
17900
+ "@list" in _2JPCKWTcfBmTCcW8Tv3TpRaLVaqg__array[0]
17901
+ ? _2JPCKWTcfBmTCcW8Tv3TpRaLVaqg__array[0]["@list"]
17902
+ : _2JPCKWTcfBmTCcW8Tv3TpRaLVaqg__array) {
17903
+ if (v == null)
17904
+ continue;
17905
+ if (typeof v === "object" && "@id" in v && !("@type" in v) &&
17906
+ globalThis.Object.keys(v).length === 1) {
17907
+ _2JPCKWTcfBmTCcW8Tv3TpRaLVaqg.push(new URL(v["@id"]));
17908
+ continue;
17909
+ }
17910
+ const decoded = typeof v === "object" && "@type" in v &&
17911
+ Array.isArray(v["@type"]) &&
17912
+ [
17913
+ "https://www.w3.org/ns/activitystreams#Object",
17914
+ "http://joinmastodon.org/ns#Emoji",
17915
+ "https://www.w3.org/ns/activitystreams#Activity",
17916
+ "https://www.w3.org/ns/activitystreams#Accept",
17917
+ "https://www.w3.org/ns/activitystreams#Add",
17918
+ "https://www.w3.org/ns/activitystreams#Announce",
17919
+ "https://www.w3.org/ns/activitystreams#Create",
17920
+ "https://www.w3.org/ns/activitystreams#Delete",
17921
+ "https://www.w3.org/ns/activitystreams#Dislike",
17922
+ "https://www.w3.org/ns/activitystreams#Flag",
17923
+ "https://www.w3.org/ns/activitystreams#Follow",
17924
+ "https://www.w3.org/ns/activitystreams#Ignore",
17925
+ "https://www.w3.org/ns/activitystreams#Block",
17926
+ "https://www.w3.org/ns/activitystreams#IntransitiveActivity",
17927
+ "https://www.w3.org/ns/activitystreams#Arrive",
17928
+ "https://www.w3.org/ns/activitystreams#Question",
17929
+ "https://www.w3.org/ns/activitystreams#Join",
17930
+ "https://www.w3.org/ns/activitystreams#Leave",
17931
+ "https://www.w3.org/ns/activitystreams#Like",
17932
+ "https://www.w3.org/ns/activitystreams#Listen",
17933
+ "https://www.w3.org/ns/activitystreams#Offer",
17934
+ "https://www.w3.org/ns/activitystreams#Invite",
17935
+ "https://www.w3.org/ns/activitystreams#Reject",
17936
+ "https://www.w3.org/ns/activitystreams#Remove",
17937
+ "https://www.w3.org/ns/activitystreams#Undo",
17938
+ "https://www.w3.org/ns/activitystreams#Update",
17939
+ "https://www.w3.org/ns/activitystreams#Application",
17940
+ "https://www.w3.org/ns/activitystreams#Article",
17941
+ "https://www.w3.org/ns/activitystreams#Collection",
17942
+ "https://www.w3.org/ns/activitystreams#CollectionPage",
17943
+ "https://www.w3.org/ns/activitystreams#OrderedCollectionPage",
17944
+ "https://www.w3.org/ns/activitystreams#OrderedCollection",
17945
+ "https://www.w3.org/ns/activitystreams#Document",
17946
+ "https://www.w3.org/ns/activitystreams#Audio",
17947
+ "https://www.w3.org/ns/activitystreams#Image",
17948
+ "https://www.w3.org/ns/activitystreams#Page",
17949
+ "https://www.w3.org/ns/activitystreams#Video",
17950
+ "https://www.w3.org/ns/activitystreams#Event",
17951
+ "https://www.w3.org/ns/activitystreams#Group",
17952
+ "https://www.w3.org/ns/activitystreams#Note",
17953
+ "https://www.w3.org/ns/activitystreams#Organization",
17954
+ "https://www.w3.org/ns/activitystreams#Person",
17955
+ "https://www.w3.org/ns/activitystreams#Place",
17956
+ "https://www.w3.org/ns/activitystreams#Profile",
17957
+ "https://www.w3.org/ns/activitystreams#Relationship",
17958
+ "https://www.w3.org/ns/activitystreams#Service",
17959
+ "https://www.w3.org/ns/activitystreams#Tombstone",
17960
+ ].some((t) => v["@type"].includes(t))
17961
+ ? await Object.fromJsonLd(v, options)
17962
+ : typeof v === "object" && "@type" in v &&
17963
+ Array.isArray(v["@type"]) &&
17964
+ [
17965
+ "https://www.w3.org/ns/activitystreams#Link",
17966
+ "https://www.w3.org/ns/activitystreams#Hashtag",
17967
+ "https://www.w3.org/ns/activitystreams#Mention",
17968
+ ].some((t) => v["@type"].includes(t))
17969
+ ? await Link.fromJsonLd(v, options)
17970
+ : undefined;
17971
+ if (typeof decoded === "undefined")
17972
+ continue;
17973
+ _2JPCKWTcfBmTCcW8Tv3TpRaLVaqg.push(decoded);
17974
+ }
17975
+ instance.#_2JPCKWTcfBmTCcW8Tv3TpRaLVaqg = _2JPCKWTcfBmTCcW8Tv3TpRaLVaqg;
17794
17976
  const _2W4yinFwqmpneu2h4m1mZ3pcLADd = [];
17795
17977
  const _2W4yinFwqmpneu2h4m1mZ3pcLADd__array = values["https://www.w3.org/ns/activitystreams#startIndex"];
17796
17978
  for (const v of _2W4yinFwqmpneu2h4m1mZ3pcLADd__array == null
@@ -17808,6 +17990,19 @@ export class OrderedCollectionPage extends CollectionPage {
17808
17990
  }
17809
17991
  _getCustomInspectProxy() {
17810
17992
  const proxy = super._getCustomInspectProxy();
17993
+ const _2JPCKWTcfBmTCcW8Tv3TpRaLVaqg = this.#_2JPCKWTcfBmTCcW8Tv3TpRaLVaqg
17994
+ // deno-lint-ignore no-explicit-any
17995
+ .map((v) => v instanceof URL
17996
+ ? {
17997
+ [Symbol.for("Deno.customInspect")]: (inspect, options) => "URL " + inspect(v.href, options),
17998
+ [Symbol.for("nodejs.util.inspect.custom")]: (_depth, options, inspect) => "URL " + inspect(v.href, options),
17999
+ }
18000
+ : v);
18001
+ if (_2JPCKWTcfBmTCcW8Tv3TpRaLVaqg.length > 1 ||
18002
+ !("item" in proxy) &&
18003
+ _2JPCKWTcfBmTCcW8Tv3TpRaLVaqg.length > 0) {
18004
+ proxy.items = _2JPCKWTcfBmTCcW8Tv3TpRaLVaqg;
18005
+ }
17811
18006
  const _2W4yinFwqmpneu2h4m1mZ3pcLADd = this.#_2W4yinFwqmpneu2h4m1mZ3pcLADd
17812
18007
  // deno-lint-ignore no-explicit-any
17813
18008
  .map((v) => v instanceof URL
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fedify/fedify",
3
- "version": "0.11.0-dev.258+4a46b617",
3
+ "version": "0.11.0-dev.259+11f82046",
4
4
  "description": "An ActivityPub server framework",
5
5
  "keywords": [
6
6
  "ActivityPub",
@@ -7148,10 +7148,10 @@ export declare class OrderedCollectionPage extends CollectionPage {
7148
7148
  current?: CollectionPage | URL | null;
7149
7149
  first?: CollectionPage | URL | null;
7150
7150
  last?: CollectionPage | URL | null;
7151
- items?: (Object | Link | URL)[];
7152
7151
  partOf?: Collection | URL | null;
7153
7152
  next?: CollectionPage | URL | null;
7154
7153
  prev?: CollectionPage | URL | null;
7154
+ items?: (Object | Link | URL)[];
7155
7155
  startIndex?: number | null;
7156
7156
  }, { documentLoader, contextLoader, }?: {
7157
7157
  documentLoader?: DocumentLoader;
@@ -7213,15 +7213,29 @@ export declare class OrderedCollectionPage extends CollectionPage {
7213
7213
  current?: CollectionPage | URL | null;
7214
7214
  first?: CollectionPage | URL | null;
7215
7215
  last?: CollectionPage | URL | null;
7216
- items?: (Object | Link | URL)[];
7217
7216
  partOf?: Collection | URL | null;
7218
7217
  next?: CollectionPage | URL | null;
7219
7218
  prev?: CollectionPage | URL | null;
7219
+ items?: (Object | Link | URL)[];
7220
7220
  startIndex?: number | null;
7221
7221
  }, options?: {
7222
7222
  documentLoader?: DocumentLoader;
7223
7223
  contextLoader?: DocumentLoader;
7224
7224
  }): OrderedCollectionPage;
7225
+ /**
7226
+ * Similar to
7227
+ * {@link OrderedCollectionPage.getItems},
7228
+ * but returns their `@id`s instead of the objects themselves.
7229
+ */
7230
+ get itemIds(): URL[];
7231
+ /** Identifies the items contained in a collection. The items might be ordered
7232
+ * or unordered.
7233
+ */
7234
+ getItems(options?: {
7235
+ documentLoader?: DocumentLoader;
7236
+ contextLoader?: DocumentLoader;
7237
+ suppressError?: boolean;
7238
+ }): AsyncIterable<Object | Link>;
7225
7239
  /** A non-negative integer value identifying the relative position within
7226
7240
  * the logical view of a strictly ordered collection.
7227
7241
  */