osra 0.3.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,7 +23,24 @@ export type ConnectionRevivableContext<TModules extends readonly RevivableModule
23
23
  revivableModules: TModules;
24
24
  eventTarget: MessageEventTarget<TModules>;
25
25
  };
26
- export declare const startBidirectionalConnection: <TModules extends readonly RevivableModule[] = readonly [typeof import("../revivables/transfer"), typeof import("../revivables/identity"), typeof import("../revivables/array-buffer"), typeof import("../revivables/date"), typeof import("../revivables/headers"), typeof import("../revivables/error"), typeof import("../revivables/typed-array"), typeof import("../revivables/promise"), typeof import("../revivables/function"), typeof import("../revivables/message-port"), typeof import("../revivables/readable-stream"), typeof import("../revivables/abort-signal"), typeof import("../revivables/response"), typeof import("../revivables/request"), typeof import("../revivables/map"), typeof import("../revivables/set"), typeof import("../revivables/bigint"), typeof import("../revivables/event-target")]>({ transport, value, remoteUuid, eventTarget, send, revivableModules }: {
26
+ export declare const startBidirectionalConnection: <TModules extends readonly RevivableModule[] = readonly [typeof import("../revivables/transfer"), typeof import("../revivables/identity"), typeof import("../revivables/array-buffer"), typeof import("../revivables/date"), typeof import("../revivables/headers"), typeof import("../revivables/error"), typeof import("../revivables/typed-array"), typeof import("../revivables/blob"), typeof import("../revivables/promise"), typeof import("../revivables/function"), typeof import("../revivables/message-port"), typeof import("../revivables/readable-stream"), typeof import("../revivables/abort-signal"), typeof import("../revivables/response"), typeof import("../revivables/request"), typeof import("../revivables/map"), typeof import("../revivables/set"), typeof import("../revivables/bigint"), typeof import("../revivables/symbol"), typeof import("../revivables/event"), typeof import("../revivables/event-target"), {
27
+ readonly type: 'clonable';
28
+ readonly capableOnly: true;
29
+ readonly isType: (value: unknown) => value is import("../revivables/fallbacks").Clonable;
30
+ readonly box: (value: import("../revivables/fallbacks").Clonable, _context: import("..").RevivableContext<any>) => import("../revivables/fallbacks").Clonable;
31
+ readonly revive: (value: import("../revivables/fallbacks").BoxedClonable, _context: import("..").RevivableContext<any>) => import("../revivables/fallbacks").Clonable;
32
+ }, {
33
+ readonly type: 'transferable';
34
+ readonly capableOnly: true;
35
+ readonly isType: (value: unknown) => value is import("../revivables/fallbacks").Transferable;
36
+ readonly box: (value: import("../revivables/fallbacks").Transferable, _context: import("..").RevivableContext<any>) => import("../revivables/fallbacks").Transferable;
37
+ readonly revive: (value: import("../revivables/fallbacks").BoxedTransferable, _context: import("..").RevivableContext<any>) => import("../revivables/fallbacks").Transferable;
38
+ }, {
39
+ readonly type: 'unclonable';
40
+ readonly isType: (value: unknown) => value is never;
41
+ readonly box: (_value: never, _context: import("..").RevivableContext<any>) => import("../revivables/fallbacks").BoxedUnclonable;
42
+ readonly revive: (_value: import("../revivables/fallbacks").BoxedUnclonable, _context: import("..").RevivableContext<any>) => Record<string, never>;
43
+ }]>({ transport, value, remoteUuid, eventTarget, send, revivableModules }: {
27
44
  transport: Transport;
28
45
  value: Capable<TModules>;
29
46
  remoteUuid: Uuid;
@@ -44,10 +61,6 @@ export type BidirectionalConnection<TModules extends readonly RevivableModule[]
44
61
  revivableContext: ConnectionRevivableContext<TModules>;
45
62
  remoteValue: Promise<Capable>;
46
63
  };
47
- /**
48
- * init() — mounts the bidirectional mode on the shared protocol context.
49
- * Only activates when the transport can both emit and receive. Owns the
50
- * announce / close handshake and routes per-connection messages (init /
51
- * message / message-port-close) to the right connection's eventTarget.
52
- */
64
+ /** Mounts bidirectional mode on the shared protocol context. Only active
65
+ * when the transport can both emit and receive. */
53
66
  export declare const init: <TModules extends readonly RevivableModule[]>(ctx: ProtocolContext<TModules>) => void;
@@ -17,4 +17,4 @@ export type ConnectionMessage<TModules extends readonly RevivableModule[] = Defa
17
17
  Messages: (modules: TModules, value: T) => infer R;
18
18
  } ? R : never;
19
19
  export type ConnectionContext<TModules extends readonly RevivableModule[] = DefaultRevivableModules> = BidirectionalConnectionContext<TModules>;
20
- export declare const startConnections: <T = unknown, const TUserModules extends readonly RevivableModule[] = readonly []>(value: Capable<[...DefaultRevivableModules, ...TUserModules]>, { transport: _transport, name, remoteName, key, origin, unregisterSignal, revivableModules: _userRevivableModules, uuid: _uuid, remoteUuid: presetRemoteUuid, }: StartConnectionsOptions<TUserModules>) => Promise<T>;
20
+ export declare const startConnections: <T = unknown, const TModules extends readonly RevivableModule[] = DefaultRevivableModules>(value: Capable<TModules>, { transport: _transport, name, remoteName, key, origin, unregisterSignal, revivableModules: configureRevivableModules, uuid: _uuid, remoteUuid: presetRemoteUuid, }: StartConnectionsOptions<TModules>) => Promise<T>;
@@ -4,7 +4,11 @@ import type { Transport } from '../utils/transport';
4
4
  import type { ConnectionContext } from '.';
5
5
  import type { TypedEventTarget } from '../utils/typed-event-target';
6
6
  export declare const normalizeTransport: (transport: Transport) => Transport;
7
- export declare const mergeRevivableModules: <TUserModules extends readonly RevivableModule[]>(userModules: TUserModules | undefined) => readonly (typeof import("../revivables/array-buffer") | typeof import("../revivables/date") | typeof import("../revivables/headers") | typeof import("../revivables/error") | typeof import("../revivables/typed-array") | typeof import("../revivables/transfer") | typeof import("../revivables/message-port") | typeof import("../revivables/promise") | typeof import("../revivables/function") | typeof import("../revivables/readable-stream") | typeof import("../revivables/abort-signal") | typeof import("../revivables/response") | typeof import("../revivables/request") | typeof import("../revivables/identity") | typeof import("../revivables/map") | typeof import("../revivables/set") | typeof import("../revivables/bigint") | typeof import("../revivables/event-target"))[] | readonly [...(typeof import("../revivables/array-buffer") | typeof import("../revivables/date") | typeof import("../revivables/headers") | typeof import("../revivables/error") | typeof import("../revivables/typed-array") | typeof import("../revivables/transfer") | typeof import("../revivables/message-port") | typeof import("../revivables/promise") | typeof import("../revivables/function") | typeof import("../revivables/readable-stream") | typeof import("../revivables/abort-signal") | typeof import("../revivables/response") | typeof import("../revivables/request") | typeof import("../revivables/identity") | typeof import("../revivables/map") | typeof import("../revivables/set") | typeof import("../revivables/bigint") | typeof import("../revivables/event-target"))[], ...TUserModules];
7
+ /** Resolves the final revivable module list. The user supplies a function
8
+ * that takes the defaults and returns whatever ordering/composition they
9
+ * want — add modules, drop defaults, reorder, override per-type. When
10
+ * omitted, the defaults are used as-is. */
11
+ export declare const mergeRevivableModules: <TModules extends readonly RevivableModule[] = DefaultRevivableModules>(configure: ((defaults: DefaultRevivableModules) => TModules) | undefined) => TModules;
8
12
  export type ProtocolEventMap<TModules extends readonly RevivableModule[] = DefaultRevivableModules> = {
9
13
  message: CustomEvent<Message<TModules>>;
10
14
  };
@@ -21,14 +25,17 @@ export type ProtocolContext<TModules extends readonly RevivableModule[] = Defaul
21
25
  resolveRemoteValue: (value: Capable<TModules>) => void;
22
26
  createConnectionEventTarget: () => TypedEventTarget<MessageEventMap<TModules>>;
23
27
  };
24
- export type StartConnectionsOptions<TUserModules extends readonly RevivableModule[] = readonly []> = {
28
+ export type StartConnectionsOptions<TModules extends readonly RevivableModule[] = DefaultRevivableModules> = {
25
29
  transport: Transport;
26
30
  name?: string;
27
31
  remoteName?: string;
28
32
  key?: string;
29
33
  origin?: string;
30
34
  unregisterSignal?: AbortSignal;
31
- revivableModules?: TUserModules;
35
+ /** Configure the revivable module list. Receives the defaults and
36
+ * returns the final ordered list — add modules, drop defaults, reorder,
37
+ * or override per-type as needed. */
38
+ revivableModules?: (defaults: DefaultRevivableModules) => TModules;
32
39
  uuid?: Uuid;
33
40
  remoteUuid?: Uuid;
34
41
  };
package/build/index.d.ts CHANGED
@@ -1,16 +1,25 @@
1
1
  import type { Capable } from './types';
2
- import type { DefaultRevivableModules } from './revivables';
2
+ import type { DefaultRevivableModules, RevivableContext } from './revivables';
3
3
  import type { RevivableModule } from './revivables';
4
4
  import type { StartConnectionsOptions } from './connections/utils';
5
+ import type { Transport } from './utils/transport';
5
6
  import type { BadFieldValue, BadFieldPath, BadFieldParent, ErrorMessage, BadValue, Path, ParentObject } from './utils/capable-check';
6
7
  export * from './types';
7
8
  export * from './revivables';
8
9
  export * from './connections';
9
10
  export * from './utils';
10
- type CapableCheck<T, TModules extends readonly RevivableModule[] = DefaultRevivableModules> = T extends Capable<TModules> ? T : T & {
11
+ /** Synthetic context so `Capable` can narrow on the inferred transport
12
+ * without an actual context object at the call site. Only `transport`
13
+ * matters; the rest is stubbed with the broadest types. */
14
+ type ContextOf<TTransport extends Transport> = RevivableContext & {
15
+ transport: TTransport;
16
+ };
17
+ type CapableCheck<T, TModules extends readonly RevivableModule[] = DefaultRevivableModules, Ctx extends RevivableContext = RevivableContext> = T extends Capable<TModules, Ctx> ? T : T & {
11
18
  [ErrorMessage]: 'Value type must resolve to a Capable';
12
- [BadValue]: BadFieldValue<T, Capable<TModules>>;
13
- [Path]: BadFieldPath<T, Capable<TModules>>;
14
- [ParentObject]: BadFieldParent<T, Capable<TModules>>;
19
+ [BadValue]: BadFieldValue<T, Capable<TModules, Ctx>>;
20
+ [Path]: BadFieldPath<T, Capable<TModules, Ctx>>;
21
+ [ParentObject]: BadFieldParent<T, Capable<TModules, Ctx>>;
15
22
  };
16
- export declare const expose: <T = unknown, const TUserModules extends readonly RevivableModule[] = readonly [], const TValue = Capable<[...DefaultRevivableModules, ...TUserModules]>>(value: CapableCheck<TValue, [...DefaultRevivableModules, ...TUserModules]>, options: StartConnectionsOptions<TUserModules>) => Promise<T>;
23
+ export declare const expose: <T = unknown, const TModules extends readonly RevivableModule[] = DefaultRevivableModules, const TTransport extends Transport = Transport, const TValue = Capable<TModules, ContextOf<TTransport>>>(value: CapableCheck<TValue, TModules, ContextOf<TTransport>>, options: StartConnectionsOptions<TModules> & {
24
+ transport: TTransport;
25
+ }) => Promise<T>;