atom.io 0.40.8 → 0.40.10

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.
Files changed (86) hide show
  1. package/dist/{chunk-Cl8Af3a2.js → chunk-CTAAG5j7.js} +3 -1
  2. package/dist/eslint-plugin/index.js +2 -3
  3. package/dist/eslint-plugin/index.js.map +1 -1
  4. package/dist/internal/index.d.ts +4 -3
  5. package/dist/internal/index.d.ts.map +1 -1
  6. package/dist/internal/index.js +1129 -3
  7. package/dist/internal/index.js.map +1 -1
  8. package/dist/react-devtools/index.js.map +1 -1
  9. package/dist/realtime/index.d.ts +29 -5
  10. package/dist/realtime/index.d.ts.map +1 -1
  11. package/dist/realtime/index.js +46 -3
  12. package/dist/realtime/index.js.map +1 -1
  13. package/dist/realtime-client/index.d.ts +1 -2
  14. package/dist/realtime-client/index.d.ts.map +1 -1
  15. package/dist/realtime-client/index.js +1 -2
  16. package/dist/realtime-client/index.js.map +1 -1
  17. package/dist/realtime-react/index.d.ts +4 -4
  18. package/dist/realtime-react/index.d.ts.map +1 -1
  19. package/dist/realtime-react/index.js +1 -2
  20. package/dist/realtime-react/index.js.map +1 -1
  21. package/dist/realtime-server/index.d.ts +5 -16
  22. package/dist/realtime-server/index.d.ts.map +1 -1
  23. package/dist/realtime-server/index.js +6 -10
  24. package/dist/realtime-server/index.js.map +1 -1
  25. package/dist/realtime-testing/index.d.ts +2 -2
  26. package/dist/realtime-testing/index.d.ts.map +1 -1
  27. package/dist/realtime-testing/index.js +2 -2
  28. package/dist/realtime-testing/index.js.map +1 -1
  29. package/dist/transceivers/o-list/index.d.ts +77 -0
  30. package/dist/transceivers/o-list/index.d.ts.map +1 -0
  31. package/dist/transceivers/o-list/index.js +308 -0
  32. package/dist/transceivers/o-list/index.js.map +1 -0
  33. package/dist/transceivers/set-rtx/index.d.ts +1 -1
  34. package/dist/transceivers/set-rtx/index.d.ts.map +1 -1
  35. package/dist/transceivers/set-rtx/index.js +2 -2
  36. package/dist/transceivers/set-rtx/index.js.map +1 -1
  37. package/dist/transceivers/u-list/index.d.ts +29 -0
  38. package/dist/transceivers/u-list/index.d.ts.map +1 -0
  39. package/dist/transceivers/u-list/index.js +87 -0
  40. package/dist/transceivers/u-list/index.js.map +1 -0
  41. package/package.json +14 -6
  42. package/src/internal/mutable/tracker.ts +21 -21
  43. package/src/internal/mutable/transceiver.ts +4 -4
  44. package/src/internal/set-state/index.ts +1 -0
  45. package/src/{realtime-server → realtime}/employ-socket.ts +2 -2
  46. package/src/realtime/index.ts +2 -0
  47. package/src/realtime/shared-room-store.ts +12 -11
  48. package/src/realtime-client/continuity/register-and-attempt-confirmed-update.ts +1 -1
  49. package/src/realtime-client/push-state.ts +1 -2
  50. package/src/realtime-react/use-single-effect.ts +1 -1
  51. package/src/realtime-server/continuity/continuity-store.ts +1 -1
  52. package/src/realtime-server/continuity/provide-outcomes.ts +2 -2
  53. package/src/realtime-server/continuity/provide-perspectives.ts +1 -2
  54. package/src/realtime-server/continuity/provide-startup-payloads.ts +3 -3
  55. package/src/realtime-server/continuity/receive-action-requests.ts +2 -4
  56. package/src/realtime-server/continuity/track-acknowledgements.ts +2 -3
  57. package/src/realtime-server/index.ts +0 -1
  58. package/src/realtime-server/ipc-sockets/custom-socket.ts +1 -2
  59. package/src/realtime-server/ipc-sockets/parent-socket.ts +2 -4
  60. package/src/realtime-server/realtime-family-provider.ts +1 -1
  61. package/src/realtime-server/realtime-mutable-family-provider.ts +1 -1
  62. package/src/realtime-server/realtime-mutable-provider.ts +1 -1
  63. package/src/realtime-server/realtime-server-stores/server-room-external-store.ts +2 -2
  64. package/src/realtime-server/realtime-server-stores/server-user-store.ts +8 -9
  65. package/src/realtime-server/realtime-state-provider.ts +1 -1
  66. package/src/realtime-server/realtime-state-receiver.ts +3 -6
  67. package/src/realtime-server/server-config.ts +1 -2
  68. package/src/realtime-testing/setup-realtime-test.tsx +3 -4
  69. package/src/transceivers/o-list/index.ts +1 -0
  70. package/src/transceivers/o-list/o-list.ts +412 -0
  71. package/src/transceivers/set-rtx/set-rtx.ts +3 -3
  72. package/src/transceivers/u-list/index.ts +1 -0
  73. package/src/transceivers/u-list/u-list.ts +123 -0
  74. package/dist/employ-socket-D6wgByWh.js +0 -12
  75. package/dist/employ-socket-D6wgByWh.js.map +0 -1
  76. package/dist/has-role-CMlaUlaf.js +0 -1133
  77. package/dist/has-role-CMlaUlaf.js.map +0 -1
  78. package/dist/is-fn-DY1wZ-md.js +0 -10
  79. package/dist/is-fn-DY1wZ-md.js.map +0 -1
  80. package/dist/mutex-store-CSvxY9i3.js +0 -11
  81. package/dist/mutex-store-CSvxY9i3.js.map +0 -1
  82. package/dist/shared-room-store-BfW3nWif.js +0 -31
  83. package/dist/shared-room-store-BfW3nWif.js.map +0 -1
  84. package/dist/shared-room-store-D2o4ZLjC.d.ts +0 -15
  85. package/dist/shared-room-store-D2o4ZLjC.d.ts.map +0 -1
  86. /package/src/{realtime-server → realtime}/socket-interface.ts +0 -0
@@ -136,27 +136,27 @@ export class Tracker<T extends Transceiver<any, any, any>> {
136
136
  return
137
137
  }
138
138
 
139
- const mutable = getFromStore(target, mutableState)
140
- const updateNumber = mutable.getUpdateNumber(newValue)
141
- const eventOffset = updateNumber - mutable.cacheUpdateNumber
142
- if (newValue && eventOffset === 1) {
143
- setIntoStore(
144
- target,
145
- mutableState,
146
- (transceiver) => (transceiver.do(newValue), transceiver),
147
- )
148
- } else {
149
- const expected = mutable.cacheUpdateNumber + 1
150
- target.logger.info(
151
- `❌`,
152
- `mutable_atom`,
153
- mutableState.key,
154
- `could not be updated. Expected update number`,
155
- expected,
156
- `but got`,
157
- updateNumber,
158
- )
159
- }
139
+ // const mutable = getFromStore(target, mutableState)
140
+ // const updateNumber = mutable.getUpdateNumber(newValue)
141
+ // const eventOffset = updateNumber - mutable.cacheUpdateNumber
142
+ // if (newValue && eventOffset === 1) {
143
+ setIntoStore(
144
+ target,
145
+ mutableState,
146
+ (transceiver) => (transceiver.do(newValue), transceiver),
147
+ )
148
+ // } else {
149
+ // const expected = mutable.cacheUpdateNumber + 1
150
+ // target.logger.info(
151
+ // `❌`,
152
+ // `mutable_atom`,
153
+ // mutableState.key,
154
+ // `could not be updated. Expected update number`,
155
+ // expected,
156
+ // `but got`,
157
+ // updateNumber,
158
+ // )
159
+ // }
160
160
  },
161
161
  { inboundTracker: true },
162
162
  ),
@@ -9,8 +9,8 @@ export interface Transceiver<
9
9
  do: (update: S) => number | `OUT_OF_RANGE` | null
10
10
  undo: (update: S) => void
11
11
  subscribe: (key: string, fn: (update: S) => void) => () => void
12
- cacheUpdateNumber: number
13
- getUpdateNumber: (update: S) => number
12
+ // cacheUpdateNumber: number
13
+ // getUpdateNumber: (update: S) => number
14
14
  toJSON: () => J
15
15
  }
16
16
 
@@ -31,8 +31,8 @@ export function isTransceiver(
31
31
  `do` in value &&
32
32
  `undo` in value &&
33
33
  `subscribe` in value &&
34
- `cacheUpdateNumber` in value &&
35
- `getUpdateNumber` in value &&
34
+ // `cacheUpdateNumber` in value &&
35
+ // `getUpdateNumber` in value &&
36
36
  `READONLY_VIEW` in value &&
37
37
  `toJSON` in value
38
38
  )
@@ -1,5 +1,6 @@
1
1
  export * from "./become"
2
2
  export * from "./evict-downstream"
3
+ export * from "./operate-on-store"
3
4
  export * from "./reset-atom-or-selector"
4
5
  export * from "./reset-in-store"
5
6
  export * from "./set-atom-or-selector"
@@ -1,5 +1,5 @@
1
- import type { Events } from "./ipc-sockets"
2
- import type { Socket } from "./socket-interface"
1
+ import type { Socket } from "atom.io/realtime"
2
+ import type { Events } from "atom.io/realtime-server"
3
3
 
4
4
  export function employSocket<I extends Events, K extends string & keyof I>(
5
5
  socket: Socket,
@@ -1,3 +1,5 @@
1
+ export * from "./employ-socket"
1
2
  export * from "./mutex-store"
2
3
  export * from "./realtime-continuity"
3
4
  export * from "./shared-room-store"
5
+ export type * from "./socket-interface"
@@ -4,19 +4,20 @@ import type {
4
4
  ReadonlyPureSelectorFamilyToken,
5
5
  } from "atom.io"
6
6
  import { getInternalRelations, join, mutableAtom, selectorFamily } from "atom.io"
7
- import { SetRTX } from "atom.io/transceivers/set-rtx"
7
+ import { UList } from "atom.io/transceivers/u-list"
8
8
 
9
- export const usersInThisRoomIndex: MutableAtomToken<SetRTX<string>> =
10
- mutableAtom<SetRTX<string>>({
11
- key: `usersInRoomIndex`,
12
- class: SetRTX,
13
- })
9
+ export const usersInThisRoomIndex: MutableAtomToken<UList<string>> = mutableAtom<
10
+ UList<string>
11
+ >({
12
+ key: `usersInRoomIndex`,
13
+ class: UList,
14
+ })
14
15
 
15
- export const roomIndex: MutableAtomToken<SetRTX<string>> = mutableAtom<
16
- SetRTX<string>
16
+ export const roomIndex: MutableAtomToken<UList<string>> = mutableAtom<
17
+ UList<string>
17
18
  >({
18
19
  key: `roomIndex`,
19
- class: SetRTX,
20
+ class: UList,
20
21
  })
21
22
 
22
23
  export type UserInRoomMeta = {
@@ -44,9 +45,9 @@ export const usersInRooms: JoinToken<
44
45
  )
45
46
 
46
47
  export const usersInMyRoomView: ReadonlyPureSelectorFamilyToken<
47
- MutableAtomToken<SetRTX<string>>[],
48
+ MutableAtomToken<UList<string>>[],
48
49
  string
49
- > = selectorFamily<MutableAtomToken<SetRTX<string>>[], string>({
50
+ > = selectorFamily<MutableAtomToken<UList<string>>[], string>({
50
51
  key: `usersInMyRoomView`,
51
52
  get:
52
53
  (myUsername) =>
@@ -7,11 +7,11 @@ import {
7
7
  setEpochNumberOfContinuity,
8
8
  setIntoStore,
9
9
  } from "atom.io/internal"
10
+ import type { Socket } from "atom.io/realtime"
10
11
  import {
11
12
  confirmedUpdateQueue,
12
13
  optimisticUpdateQueue,
13
14
  } from "atom.io/realtime-client"
14
- import type { Socket } from "atom.io/realtime-server"
15
15
 
16
16
  export const useRegisterAndAttemptConfirmedUpdate =
17
17
  (
@@ -2,8 +2,7 @@ import type { WritableToken } from "atom.io"
2
2
  import type { Store } from "atom.io/internal"
3
3
  import { setIntoStore, subscribeToState } from "atom.io/internal"
4
4
  import type { Json } from "atom.io/json"
5
- import { mutexAtoms } from "atom.io/realtime/mutex-store"
6
- import { employSocket } from "atom.io/realtime-server/employ-socket"
5
+ import { employSocket, mutexAtoms } from "atom.io/realtime"
7
6
  import type { Socket } from "socket.io-client"
8
7
 
9
8
  export function pushState<J extends Json.Serializable>(
@@ -1,6 +1,6 @@
1
1
  /** biome-ignore-all lint/correctness/useHookAtTopLevel: intentional */
2
2
 
3
- import { isFn } from "atom.io/internal/is-fn"
3
+ import { isFn } from "atom.io/internal"
4
4
  import * as React from "react"
5
5
 
6
6
  export function useSingleEffect(
@@ -5,7 +5,7 @@ import type {
5
5
  } from "atom.io"
6
6
  import { atomFamily } from "atom.io"
7
7
 
8
- import type { UserKey } from "../realtime-server-stores/server-user-store"
8
+ import type { UserKey } from "../realtime-server-stores"
9
9
 
10
10
  export function redactTransactionUpdateContent(
11
11
  visibleStateKeys: string[],
@@ -7,9 +7,9 @@ import {
7
7
  subscribeToTransaction,
8
8
  } from "atom.io/internal"
9
9
  import type { Json } from "atom.io/json"
10
- import type { ContinuityToken } from "atom.io/realtime"
10
+ import type { ContinuityToken, Socket } from "atom.io/realtime"
11
11
 
12
- import type { Socket, UserKey } from ".."
12
+ import type { UserKey } from ".."
13
13
  import {
14
14
  redactTransactionUpdateContent,
15
15
  unacknowledgedUpdatesAtoms,
@@ -5,9 +5,8 @@ import {
5
5
  getJsonToken,
6
6
  subscribeToState,
7
7
  } from "atom.io/internal"
8
- import type { ContinuityToken } from "atom.io/realtime"
8
+ import type { ContinuityToken, Socket } from "atom.io/realtime"
9
9
 
10
- import type { Socket } from ".."
11
10
  import type { UserKey } from "../realtime-server-stores"
12
11
 
13
12
  export function providePerspectives(
@@ -6,10 +6,10 @@ import {
6
6
  isRootStore,
7
7
  } from "atom.io/internal"
8
8
  import type { Json } from "atom.io/json"
9
- import type { ContinuityToken } from "atom.io/realtime"
9
+ import type { ContinuityToken, Socket } from "atom.io/realtime"
10
+ import { employSocket } from "atom.io/realtime"
10
11
 
11
- import type { Socket, UserKey } from ".."
12
- import { employSocket } from "../employ-socket"
12
+ import type { UserKey } from ".."
13
13
 
14
14
  export function provideStartupPayloads(
15
15
  store: Store,
@@ -2,10 +2,8 @@ import type { TransactionOutcomeEvent, TransactionToken } from "atom.io"
2
2
  import type { Store } from "atom.io/internal"
3
3
  import { actUponStore } from "atom.io/internal"
4
4
  import type { Json, JsonIO } from "atom.io/json"
5
- import type { ContinuityToken } from "atom.io/realtime"
6
-
7
- import { employSocket } from "../employ-socket"
8
- import type { Socket } from "../socket-interface"
5
+ import type { ContinuityToken, Socket } from "atom.io/realtime"
6
+ import { employSocket } from "atom.io/realtime"
9
7
 
10
8
  export function receiveActionRequests(
11
9
  store: Store,
@@ -1,10 +1,9 @@
1
1
  import type { Store } from "atom.io/internal"
2
2
  import { getFromStore, setIntoStore } from "atom.io/internal"
3
- import type { ContinuityToken } from "atom.io/realtime"
3
+ import type { ContinuityToken, Socket } from "atom.io/realtime"
4
+ import { employSocket } from "atom.io/realtime"
4
5
 
5
- import { employSocket } from "../employ-socket"
6
6
  import type { UserKey } from "../realtime-server-stores"
7
- import type { Socket } from "../socket-interface"
8
7
  import { unacknowledgedUpdatesAtoms } from "./continuity-store"
9
8
 
10
9
  export function trackAcknowledgements(
@@ -7,4 +7,3 @@ export * from "./realtime-server-stores"
7
7
  export * from "./realtime-state-provider"
8
8
  export * from "./realtime-state-receiver"
9
9
  export type * from "./server-config"
10
- export type * from "./socket-interface"
@@ -1,6 +1,5 @@
1
1
  import type { Json, stringified } from "atom.io/json"
2
-
3
- import type { Socket } from "../socket-interface"
2
+ import type { Socket } from "atom.io/realtime"
4
3
 
5
4
  export type Events = Json.Object<string, Json.Serializable[]>
6
5
 
@@ -3,7 +3,7 @@ import type { Readable, Writable } from "node:stream"
3
3
  import { Subject } from "atom.io/internal"
4
4
  import type { Json } from "atom.io/json"
5
5
  import { parseJson, stringifyJson } from "atom.io/json"
6
- import { SetRTX } from "atom.io/transceivers/set-rtx"
6
+ import { UList } from "atom.io/transceivers/u-list"
7
7
 
8
8
  import type { UserKey } from "../realtime-server-stores"
9
9
  import type { StderrLog } from "./child-socket"
@@ -76,9 +76,7 @@ export class ParentSocket<
76
76
  this.proc.stderr.write(
77
77
  stringifyJson(
78
78
  args.map((arg) =>
79
- arg instanceof SetRTX
80
- ? `{ ${arg.toJSON().members.join(` | `)} }`
81
- : arg,
79
+ arg instanceof UList ? `{ ${arg.toJSON().members.join(` | `)} }` : arg,
82
80
  ),
83
81
  ) + `\x03`,
84
82
  )
@@ -7,9 +7,9 @@ import {
7
7
  } from "atom.io/internal"
8
8
  import type { Canonical, Json, stringified } from "atom.io/json"
9
9
  import { stringifyJson } from "atom.io/json"
10
+ import { employSocket } from "atom.io/realtime"
10
11
 
11
12
  import type { ServerConfig } from "."
12
- import { employSocket } from "./employ-socket"
13
13
 
14
14
  export type FamilyProvider = ReturnType<typeof realtimeAtomFamilyProvider>
15
15
  export function realtimeAtomFamilyProvider({
@@ -10,9 +10,9 @@ import {
10
10
  } from "atom.io/internal"
11
11
  import type { Canonical, stringified } from "atom.io/json"
12
12
  import { stringifyJson } from "atom.io/json"
13
+ import { employSocket } from "atom.io/realtime"
13
14
 
14
15
  import type { ServerConfig } from "."
15
- import { employSocket } from "./employ-socket"
16
16
 
17
17
  export type MutableFamilyProvider = ReturnType<
18
18
  typeof realtimeMutableFamilyProvider
@@ -8,9 +8,9 @@ import {
8
8
  subscribeToState,
9
9
  } from "atom.io/internal"
10
10
  import type { Json } from "atom.io/json"
11
+ import { employSocket } from "atom.io/realtime"
11
12
 
12
13
  import type { ServerConfig } from "."
13
- import { employSocket } from "./employ-socket"
14
14
 
15
15
  export type MutableProvider = ReturnType<typeof realtimeMutableProvider>
16
16
  export function realtimeMutableProvider({
@@ -4,8 +4,8 @@ import { spawn } from "node:child_process"
4
4
  import type { TransactionIO, TransactionToken } from "atom.io"
5
5
  import { transaction } from "atom.io"
6
6
  import { editRelationsInStore } from "atom.io/internal"
7
- import type { UserInRoomMeta } from "atom.io/realtime/shared-room-store"
8
- import { roomIndex, usersInRooms } from "atom.io/realtime/shared-room-store"
7
+ import type { UserInRoomMeta } from "atom.io/realtime"
8
+ import { roomIndex, usersInRooms } from "atom.io/realtime"
9
9
 
10
10
  import { ChildSocket } from "../ipc-sockets"
11
11
  import type { RoomKey } from "./server-user-store"
@@ -6,9 +6,8 @@ import type {
6
6
  RegularAtomFamilyToken,
7
7
  } from "atom.io"
8
8
  import { atomFamily, join, mutableAtom, selectorFamily } from "atom.io"
9
- import { SetRTX } from "atom.io/transceivers/set-rtx"
10
-
11
- import type { Socket } from ".."
9
+ import type { Socket } from "atom.io/realtime"
10
+ import { UList } from "atom.io/transceivers/u-list"
12
11
 
13
12
  export type SocketKey = `socket::${string}`
14
13
  export type UserKey = `user::${string}`
@@ -29,17 +28,17 @@ export const socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey> =
29
28
  default: null,
30
29
  })
31
30
 
32
- export const socketIndex: MutableAtomToken<SetRTX<SocketKey>> = mutableAtom<
33
- SetRTX<SocketKey>
31
+ export const socketIndex: MutableAtomToken<UList<SocketKey>> = mutableAtom<
32
+ UList<SocketKey>
34
33
  >({
35
34
  key: `socketsIndex`,
36
- class: SetRTX,
35
+ class: UList,
37
36
  })
38
- export const userIndex: MutableAtomToken<SetRTX<UserKey>> = mutableAtom<
39
- SetRTX<UserKey>
37
+ export const userIndex: MutableAtomToken<UList<UserKey>> = mutableAtom<
38
+ UList<UserKey>
40
39
  >({
41
40
  key: `usersIndex`,
42
- class: SetRTX,
41
+ class: UList,
43
42
  })
44
43
  export const usersOfSockets: JoinToken<
45
44
  `user`,
@@ -1,9 +1,9 @@
1
1
  import type * as AtomIO from "atom.io"
2
2
  import { getFromStore, IMPLICIT, subscribeToState } from "atom.io/internal"
3
3
  import type { Json } from "atom.io/json"
4
+ import { employSocket } from "atom.io/realtime"
4
5
 
5
6
  import type { ServerConfig } from "."
6
- import { employSocket } from "./employ-socket"
7
7
 
8
8
  export type StateProvider = ReturnType<typeof realtimeStateProvider>
9
9
  export function realtimeStateProvider({
@@ -3,18 +3,15 @@ import {
3
3
  findInStore,
4
4
  getFromStore,
5
5
  IMPLICIT,
6
+ operateOnStore,
7
+ OWN_OP,
6
8
  setIntoStore,
7
9
  subscribeToState,
8
10
  } from "atom.io/internal"
9
- import {
10
- operateOnStore,
11
- OWN_OP,
12
- } from "atom.io/internal/set-state/operate-on-store"
13
11
  import type { Json } from "atom.io/json"
14
- import { mutexAtoms } from "atom.io/realtime/mutex-store"
12
+ import { employSocket, mutexAtoms } from "atom.io/realtime"
15
13
 
16
14
  import type { ServerConfig } from "."
17
- import { employSocket } from "./employ-socket"
18
15
 
19
16
  export type StateReceiver = ReturnType<typeof realtimeStateReceiver>
20
17
  export function realtimeStateReceiver({
@@ -1,6 +1,5 @@
1
1
  import type { RootStore } from "atom.io/internal"
2
-
3
- import type { Socket } from "./socket-interface"
2
+ import type { Socket } from "atom.io/realtime"
4
3
 
5
4
  export type ServerConfig = {
6
5
  socket: Socket
@@ -19,7 +19,7 @@ import * as AR from "atom.io/react"
19
19
  import * as RTC from "atom.io/realtime-client"
20
20
  import * as RTR from "atom.io/realtime-react"
21
21
  import * as RTS from "atom.io/realtime-server"
22
- import { SetRTX } from "atom.io/transceivers/set-rtx"
22
+ import { UList } from "atom.io/transceivers/u-list"
23
23
  import * as Happy from "happy-dom"
24
24
  import * as React from "react"
25
25
  import * as SocketIO from "socket.io"
@@ -45,9 +45,8 @@ function prefixLogger(store: Store, prefix: string) {
45
45
  if (param instanceof ChildProcess) {
46
46
  params[idx] = `ChildProcess:${param.pid}`
47
47
  }
48
- if (param instanceof SetRTX) {
49
- params[idx] =
50
- `SetRTX(${param.size}) {${[...param].join(`, `)}} at ${param.cacheIdx}`
48
+ if (param instanceof UList) {
49
+ params[idx] = `UList(${param.size}) {${[...param].join(`, `)}}`
51
50
  }
52
51
  idx++
53
52
  }
@@ -0,0 +1 @@
1
+ export * from "./o-list"