Merge pull request #1380 from akihikodaki/misc

Fix ActivityStreams collection resolution
This commit is contained in:
syuilo 2018-04-03 16:37:07 +09:00 committed by GitHub
commit 9449ed14d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 19 additions and 16 deletions

View File

@ -43,32 +43,35 @@ export default class Resolver {
}
private async resolveCollection(value) {
if (Array.isArray(value)) {
return value;
}
const resolved = typeof value === 'string' ?
await this.resolveUnrequestedOne(value) :
value;
{ resolver: this, object: value };
switch (resolved.type) {
switch (resolved.object.type) {
case 'Collection':
return resolved.items;
resolved.object = resolved.object.items;
break;
case 'OrderedCollection':
return resolved.orderedItems;
resolved.object = resolved.object.orderedItems;
break;
default:
return [resolved];
if (!Array.isArray(value)) {
resolved.object = [resolved.object];
}
break;
}
return resolved;
}
public async resolve(value): Promise<Array<Promise<IResult>>> {
const collection = await this.resolveCollection(value);
const { resolver, object } = await this.resolveCollection(value);
return collection
.filter(element => !this.requesting.has(element))
.map(this.resolveUnrequestedOne.bind(this));
return object
.filter(element => !resolver.requesting.has(element))
.map(resolver.resolveUnrequestedOne.bind(resolver));
}
public resolveOne(value) {
@ -80,9 +83,9 @@ export default class Resolver {
}
public async resolveRemoteUserObjects(value) {
const collection = await this.resolveCollection(value);
const { resolver, object } = await this.resolveCollection(value);
return collection.filter(element => !this.requesting.has(element)).map(element => {
return object.filter(element => !resolver.requesting.has(element)).map(element => {
if (typeof element === 'string') {
const object = RemoteUserObject.findOne({ uri: element });
@ -91,7 +94,7 @@ export default class Resolver {
}
}
return this.resolveUnrequestedOne(element);
return resolver.resolveUnrequestedOne(element);
});
}
}