Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions website/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# README

Building the website requires that the documentation be generated from the root project into the `src/pages/docs` directory _first_. This can be done by `yarn gendocs` from the root of the repo.
54 changes: 50 additions & 4 deletions website/src/pages/get-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,61 @@ export const schema = new GraphQLSchema({
fields: {
greetings: {
type: GraphQLString,
subscribe: async function* () {
for (const hi of ['Hi', 'Bonjour', 'Hola', 'Ciao', 'Zdravo']) {
yield { greetings: hi };
}
subscribe: async function () {
return new EventProvider().iterator();
},
},
},
}),
});

/**
* A toy event provider implementation. Will return a series of greetings with a small
* delay in between each one.
*/
class EventProvider {
private readonly events = ['Hi', 'Bonjour', 'Hola', 'Ciao', 'Zdravo'];
private promiseReject: ((v?: any) => void) | null = null;
private closed = false;

close() {
if (this.closed) { return; }
if (this.promiseReject) { this.promiseReject('closed'); }
this.closed = true;
}

isClosed() { return this.closed || this.events.length === 0; }

async event() {
return await new Promise(async (resolve, reject) => {
this.promiseReject = reject;
setTimeout(() => resolve(this.events.shift()), 100);
});
}

iterator() {
const self = this;
return {
[Symbol.asyncIterator]() { return this; },
async next(): {
try {
if (!self.isClosed()) {
return { value: await self.event(), done: false };
}
} catch (e) {
return { value: undefined, done: true };
}
},
async return(v?: any) {
self.close();
return { value: v, done: true };
},
async throw(v?: any) {
return { value: undefined, done: true };
}
};
}
}
```

### Start the server
Expand Down