Skip to content

Commit

Permalink
Rewrite provider (#352)
Browse files Browse the repository at this point in the history
This is essentially a complete rewrite of `YSweetProvider`. It
incorporates the reconnect logic directly in the provider itself,
instead of using the wrapper, which should make it easier to reason
about. This paves the way to beginning to extend the protocol (as
required for #306 and #308).
  • Loading branch information
paulgb authored Dec 11, 2024
1 parent 5616dc9 commit ecdb57b
Show file tree
Hide file tree
Showing 6 changed files with 387 additions and 628 deletions.
18 changes: 0 additions & 18 deletions debugger/src/app/debugger.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,10 @@ import { DebuggableAwareness } from '@/lib/debuggable/yawareness'

export function Debugger() {
const doc: Y.Doc = useYDoc()
const provider = useYjsProvider()
const url = provider.ws?.url
const awareness = useAwareness()

const selectAll = useCallback((e: React.MouseEvent) => {
e.stopPropagation()
e.preventDefault()

let range = document.createRange()
range.selectNodeContents(e.target as Node)
let selection = window.getSelection()
selection?.removeAllRanges()
selection?.addRange(range)
}, [])

return (
<div>
{url && (
<p className="mb-5 text-sm text-gray-400">
WebSocket URL: <samp onDoubleClick={selectAll}>{url}</samp>
</p>
)}
<div className="flex flex-row">
<div className="flex-1">
<h2 className="text-2xl font-bold mb-4">State</h2>
Expand Down
16 changes: 5 additions & 11 deletions js-pkg/client/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
import {
YSweetProvider,
ySweetProviderWrapper,
type YSweetProviderParams,
type AuthEndpoint,
type YSweetProviderWithClientToken,
} from './provider'
import { YSweetProvider, type YSweetProviderParams, type AuthEndpoint } from './provider'
import * as Y from 'yjs'
import { ClientToken, encodeClientToken } from '@y-sweet/sdk'
export { YSweetProvider, YSweetProviderParams, AuthEndpoint, YSweetProviderWithClientToken }
export { YSweetProvider, YSweetProviderParams, AuthEndpoint }

/**
* Given a docId and {@link AuthEndpoint}, create a {@link YSweetProvider} for it.
Expand All @@ -18,13 +12,13 @@ export { YSweetProvider, YSweetProviderParams, AuthEndpoint, YSweetProviderWithC
* @param extraOptions
* @returns
*/
export async function createYjsProvider(
export function createYjsProvider(
doc: Y.Doc,
docId: string,
authEndpoint: AuthEndpoint,
extraOptions: Partial<YSweetProviderParams> = {},
): Promise<YSweetProviderWithClientToken> {
return ySweetProviderWrapper(authEndpoint, docId, doc, extraOptions)
): YSweetProvider {
return new YSweetProvider(authEndpoint, docId, doc, extraOptions)
}

/**
Expand Down
Loading

0 comments on commit ecdb57b

Please sign in to comment.