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