@atproto/lex-schema 0.0.9 → 0.0.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 (279) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/LICENSE.txt +1 -1
  3. package/dist/core/$type.d.ts +11 -0
  4. package/dist/core/$type.d.ts.map +1 -1
  5. package/dist/core/$type.js +4 -0
  6. package/dist/core/$type.js.map +1 -1
  7. package/dist/core/schema.d.ts +31 -24
  8. package/dist/core/schema.d.ts.map +1 -1
  9. package/dist/core/schema.js +38 -8
  10. package/dist/core/schema.js.map +1 -1
  11. package/dist/core/string-format.d.ts +35 -35
  12. package/dist/core/string-format.d.ts.map +1 -1
  13. package/dist/core/string-format.js +49 -91
  14. package/dist/core/string-format.js.map +1 -1
  15. package/dist/core/validation-issue.js +1 -1
  16. package/dist/core/validation-issue.js.map +1 -1
  17. package/dist/core/validator.d.ts +53 -32
  18. package/dist/core/validator.d.ts.map +1 -1
  19. package/dist/core/validator.js +18 -22
  20. package/dist/core/validator.js.map +1 -1
  21. package/dist/external.d.ts +0 -85
  22. package/dist/external.d.ts.map +1 -1
  23. package/dist/external.js +0 -164
  24. package/dist/external.js.map +1 -1
  25. package/dist/helpers.d.ts +10 -5
  26. package/dist/helpers.d.ts.map +1 -1
  27. package/dist/helpers.js +3 -3
  28. package/dist/helpers.js.map +1 -1
  29. package/dist/schema/array.d.ts +9 -5
  30. package/dist/schema/array.d.ts.map +1 -1
  31. package/dist/schema/array.js +14 -5
  32. package/dist/schema/array.js.map +1 -1
  33. package/dist/schema/blob.d.ts +9 -7
  34. package/dist/schema/blob.d.ts.map +1 -1
  35. package/dist/schema/blob.js +9 -5
  36. package/dist/schema/blob.js.map +1 -1
  37. package/dist/schema/boolean.d.ts +3 -7
  38. package/dist/schema/boolean.d.ts.map +1 -1
  39. package/dist/schema/boolean.js +6 -7
  40. package/dist/schema/boolean.js.map +1 -1
  41. package/dist/schema/bytes.d.ts +3 -2
  42. package/dist/schema/bytes.d.ts.map +1 -1
  43. package/dist/schema/bytes.js +7 -3
  44. package/dist/schema/bytes.js.map +1 -1
  45. package/dist/schema/cid.d.ts +7 -7
  46. package/dist/schema/cid.d.ts.map +1 -1
  47. package/dist/schema/cid.js +5 -1
  48. package/dist/schema/cid.js.map +1 -1
  49. package/dist/schema/custom.d.ts +6 -5
  50. package/dist/schema/custom.d.ts.map +1 -1
  51. package/dist/schema/custom.js +10 -4
  52. package/dist/schema/custom.js.map +1 -1
  53. package/dist/schema/dict.d.ts +8 -8
  54. package/dist/schema/dict.d.ts.map +1 -1
  55. package/dist/schema/dict.js +11 -2
  56. package/dist/schema/dict.js.map +1 -1
  57. package/dist/schema/discriminated-union.d.ts +21 -14
  58. package/dist/schema/discriminated-union.d.ts.map +1 -1
  59. package/dist/schema/discriminated-union.js +7 -0
  60. package/dist/schema/discriminated-union.js.map +1 -1
  61. package/dist/schema/enum.d.ts +7 -9
  62. package/dist/schema/enum.d.ts.map +1 -1
  63. package/dist/schema/enum.js +8 -4
  64. package/dist/schema/enum.js.map +1 -1
  65. package/dist/schema/integer.d.ts +5 -5
  66. package/dist/schema/integer.d.ts.map +1 -1
  67. package/dist/schema/integer.js +9 -5
  68. package/dist/schema/integer.js.map +1 -1
  69. package/dist/schema/intersection.d.ts +4 -4
  70. package/dist/schema/intersection.d.ts.map +1 -1
  71. package/dist/schema/intersection.js +5 -0
  72. package/dist/schema/intersection.js.map +1 -1
  73. package/dist/schema/literal.d.ts +6 -9
  74. package/dist/schema/literal.d.ts.map +1 -1
  75. package/dist/schema/literal.js +7 -4
  76. package/dist/schema/literal.js.map +1 -1
  77. package/dist/schema/never.d.ts +3 -2
  78. package/dist/schema/never.d.ts.map +1 -1
  79. package/dist/schema/never.js +5 -1
  80. package/dist/schema/never.js.map +1 -1
  81. package/dist/schema/null.d.ts +4 -3
  82. package/dist/schema/null.d.ts.map +1 -1
  83. package/dist/schema/null.js +6 -4
  84. package/dist/schema/null.js.map +1 -1
  85. package/dist/schema/nullable.d.ts +6 -5
  86. package/dist/schema/nullable.d.ts.map +1 -1
  87. package/dist/schema/nullable.js +9 -5
  88. package/dist/schema/nullable.js.map +1 -1
  89. package/dist/schema/object.d.ts +10 -8
  90. package/dist/schema/object.d.ts.map +1 -1
  91. package/dist/schema/object.js +11 -3
  92. package/dist/schema/object.js.map +1 -1
  93. package/dist/schema/optional.d.ts +7 -5
  94. package/dist/schema/optional.d.ts.map +1 -1
  95. package/dist/schema/optional.js +14 -6
  96. package/dist/schema/optional.js.map +1 -1
  97. package/dist/schema/params.d.ts +24 -13
  98. package/dist/schema/params.d.ts.map +1 -1
  99. package/dist/schema/params.js +47 -25
  100. package/dist/schema/params.js.map +1 -1
  101. package/dist/schema/payload.d.ts +12 -9
  102. package/dist/schema/payload.d.ts.map +1 -1
  103. package/dist/schema/payload.js +11 -0
  104. package/dist/schema/payload.js.map +1 -1
  105. package/dist/schema/permission-set.d.ts +1 -0
  106. package/dist/schema/permission-set.d.ts.map +1 -1
  107. package/dist/schema/permission-set.js +5 -0
  108. package/dist/schema/permission-set.js.map +1 -1
  109. package/dist/schema/permission.d.ts +6 -5
  110. package/dist/schema/permission.d.ts.map +1 -1
  111. package/dist/schema/permission.js +5 -0
  112. package/dist/schema/permission.js.map +1 -1
  113. package/dist/schema/procedure.d.ts +2 -1
  114. package/dist/schema/procedure.d.ts.map +1 -1
  115. package/dist/schema/procedure.js +5 -0
  116. package/dist/schema/procedure.js.map +1 -1
  117. package/dist/schema/query.d.ts +2 -1
  118. package/dist/schema/query.d.ts.map +1 -1
  119. package/dist/schema/query.js +5 -0
  120. package/dist/schema/query.js.map +1 -1
  121. package/dist/schema/record.d.ts +48 -30
  122. package/dist/schema/record.d.ts.map +1 -1
  123. package/dist/schema/record.js +12 -9
  124. package/dist/schema/record.js.map +1 -1
  125. package/dist/schema/ref.d.ts +9 -6
  126. package/dist/schema/ref.d.ts.map +1 -1
  127. package/dist/schema/ref.js +9 -16
  128. package/dist/schema/ref.js.map +1 -1
  129. package/dist/schema/refine.d.ts +4 -4
  130. package/dist/schema/refine.d.ts.map +1 -1
  131. package/dist/schema/refine.js.map +1 -1
  132. package/dist/schema/regexp.d.ts +4 -3
  133. package/dist/schema/regexp.d.ts.map +1 -1
  134. package/dist/schema/regexp.js +5 -0
  135. package/dist/schema/regexp.js.map +1 -1
  136. package/dist/schema/string.d.ts +7 -8
  137. package/dist/schema/string.d.ts.map +1 -1
  138. package/dist/schema/string.js +13 -19
  139. package/dist/schema/string.js.map +1 -1
  140. package/dist/schema/subscription.d.ts +2 -1
  141. package/dist/schema/subscription.d.ts.map +1 -1
  142. package/dist/schema/subscription.js +5 -0
  143. package/dist/schema/subscription.js.map +1 -1
  144. package/dist/schema/token.d.ts +6 -5
  145. package/dist/schema/token.d.ts.map +1 -1
  146. package/dist/schema/token.js +5 -0
  147. package/dist/schema/token.js.map +1 -1
  148. package/dist/schema/typed-object.d.ts +43 -26
  149. package/dist/schema/typed-object.d.ts.map +1 -1
  150. package/dist/schema/typed-object.js +6 -3
  151. package/dist/schema/typed-object.js.map +1 -1
  152. package/dist/schema/typed-ref.d.ts +16 -25
  153. package/dist/schema/typed-ref.d.ts.map +1 -1
  154. package/dist/schema/typed-ref.js +7 -17
  155. package/dist/schema/typed-ref.js.map +1 -1
  156. package/dist/schema/typed-union.d.ts +9 -21
  157. package/dist/schema/typed-union.d.ts.map +1 -1
  158. package/dist/schema/typed-union.js +15 -11
  159. package/dist/schema/typed-union.js.map +1 -1
  160. package/dist/schema/union.d.ts +6 -6
  161. package/dist/schema/union.d.ts.map +1 -1
  162. package/dist/schema/union.js +7 -5
  163. package/dist/schema/union.js.map +1 -1
  164. package/dist/schema/unknown-object.d.ts +5 -4
  165. package/dist/schema/unknown-object.d.ts.map +1 -1
  166. package/dist/schema/unknown-object.js +5 -1
  167. package/dist/schema/unknown-object.js.map +1 -1
  168. package/dist/schema/unknown.d.ts +3 -2
  169. package/dist/schema/unknown.d.ts.map +1 -1
  170. package/dist/schema/unknown.js +5 -1
  171. package/dist/schema/unknown.js.map +1 -1
  172. package/dist/schema/with-default.d.ts +9 -0
  173. package/dist/schema/with-default.d.ts.map +1 -0
  174. package/dist/schema/with-default.js +27 -0
  175. package/dist/schema/with-default.js.map +1 -0
  176. package/dist/schema.d.ts +2 -2
  177. package/dist/schema.d.ts.map +1 -1
  178. package/dist/schema.js +2 -4
  179. package/dist/schema.js.map +1 -1
  180. package/dist/util/assertion-util.d.ts +0 -6
  181. package/dist/util/assertion-util.d.ts.map +1 -1
  182. package/dist/util/assertion-util.js +0 -28
  183. package/dist/util/assertion-util.js.map +1 -1
  184. package/dist/util/memoize.d.ts +2 -2
  185. package/dist/util/memoize.d.ts.map +1 -1
  186. package/dist/util/memoize.js +23 -39
  187. package/dist/util/memoize.js.map +1 -1
  188. package/package.json +3 -3
  189. package/src/core/$type.test.ts +20 -0
  190. package/src/core/$type.ts +30 -0
  191. package/src/core/schema.ts +86 -38
  192. package/src/core/string-format.ts +119 -158
  193. package/src/core/validation-issue.ts +1 -1
  194. package/src/core/validator.ts +93 -53
  195. package/src/external.ts +0 -404
  196. package/src/helpers.test.ts +22 -21
  197. package/src/helpers.ts +14 -14
  198. package/src/schema/array.test.ts +38 -40
  199. package/src/schema/array.ts +35 -13
  200. package/src/schema/blob.test.ts +21 -21
  201. package/src/schema/blob.ts +19 -17
  202. package/src/schema/boolean.test.ts +9 -8
  203. package/src/schema/boolean.ts +7 -13
  204. package/src/schema/bytes.test.ts +13 -13
  205. package/src/schema/bytes.ts +13 -8
  206. package/src/schema/cid.test.ts +3 -3
  207. package/src/schema/cid.ts +13 -12
  208. package/src/schema/custom.test.ts +26 -26
  209. package/src/schema/custom.ts +20 -13
  210. package/src/schema/dict.test.ts +21 -39
  211. package/src/schema/dict.ts +28 -19
  212. package/src/schema/discriminated-union.test.ts +128 -128
  213. package/src/schema/discriminated-union.ts +45 -26
  214. package/src/schema/enum.test.ts +17 -16
  215. package/src/schema/enum.ts +16 -16
  216. package/src/schema/integer.test.ts +22 -21
  217. package/src/schema/integer.ts +12 -9
  218. package/src/schema/intersection.test.ts +10 -10
  219. package/src/schema/intersection.ts +17 -14
  220. package/src/schema/literal.test.ts +35 -34
  221. package/src/schema/literal.ts +12 -15
  222. package/src/schema/never.test.ts +5 -5
  223. package/src/schema/never.ts +7 -2
  224. package/src/schema/null.test.ts +3 -3
  225. package/src/schema/null.ts +9 -9
  226. package/src/schema/nullable.test.ts +31 -42
  227. package/src/schema/nullable.ts +17 -9
  228. package/src/schema/object.test.ts +10 -12
  229. package/src/schema/object.ts +27 -18
  230. package/src/schema/optional.test.ts +21 -28
  231. package/src/schema/optional.ts +27 -10
  232. package/src/schema/params.test.ts +471 -47
  233. package/src/schema/params.ts +72 -38
  234. package/src/schema/payload.test.ts +150 -156
  235. package/src/schema/payload.ts +35 -19
  236. package/src/schema/permission-set.test.ts +206 -273
  237. package/src/schema/permission-set.ts +8 -0
  238. package/src/schema/permission.test.ts +177 -177
  239. package/src/schema/permission.ts +13 -5
  240. package/src/schema/procedure.test.ts +183 -242
  241. package/src/schema/procedure.ts +18 -5
  242. package/src/schema/query.test.ts +186 -200
  243. package/src/schema/query.ts +16 -4
  244. package/src/schema/record.test.ts +121 -101
  245. package/src/schema/record.ts +74 -40
  246. package/src/schema/ref.test.ts +101 -118
  247. package/src/schema/ref.ts +33 -28
  248. package/src/schema/refine.test.ts +28 -28
  249. package/src/schema/refine.ts +23 -20
  250. package/src/schema/regexp.test.ts +29 -33
  251. package/src/schema/regexp.ts +11 -7
  252. package/src/schema/string.test.ts +35 -35
  253. package/src/schema/string.ts +24 -33
  254. package/src/schema/subscription.test.ts +259 -387
  255. package/src/schema/subscription.ts +16 -4
  256. package/src/schema/token.test.ts +47 -324
  257. package/src/schema/token.ts +14 -7
  258. package/src/schema/typed-object.test.ts +98 -81
  259. package/src/schema/typed-object.ts +68 -33
  260. package/src/schema/typed-ref.test.ts +206 -234
  261. package/src/schema/typed-ref.ts +40 -42
  262. package/src/schema/typed-union.test.ts +40 -64
  263. package/src/schema/typed-union.ts +36 -58
  264. package/src/schema/union.test.ts +17 -27
  265. package/src/schema/union.ts +20 -16
  266. package/src/schema/unknown-object.test.ts +8 -8
  267. package/src/schema/unknown-object.ts +9 -7
  268. package/src/schema/unknown.test.ts +4 -4
  269. package/src/schema/unknown.ts +7 -5
  270. package/src/schema/with-default.ts +35 -0
  271. package/src/schema.ts +2 -6
  272. package/src/util/assertion-util.ts +0 -39
  273. package/src/util/memoize.ts +26 -46
  274. package/dist/schema/_parameters.d.ts +0 -17
  275. package/dist/schema/_parameters.d.ts.map +0 -1
  276. package/dist/schema/_parameters.js +0 -20
  277. package/dist/schema/_parameters.js.map +0 -1
  278. package/src/schema/_parameters.test.ts +0 -417
  279. package/src/schema/_parameters.ts +0 -26
@@ -1,274 +1,230 @@
1
- import { describe, expect, it } from 'vitest'
2
- import { asNsidString } from '../core.js'
3
- import { IntegerSchema } from './integer.js'
4
- import { ObjectSchema } from './object.js'
5
- import { OptionalSchema } from './optional.js'
6
- import { ParamsSchema } from './params.js'
7
- import { RefSchema } from './ref.js'
8
- import { StringSchema } from './string.js'
1
+ import { describe, expect, expectTypeOf, it } from 'vitest'
2
+ import { integer } from './integer.js'
3
+ import { ObjectSchema, object } from './object.js'
4
+ import { optional } from './optional.js'
5
+ import { ParamsSchema, params } from './params.js'
6
+ import { RefSchema, ref } from './ref.js'
7
+ import { string } from './string.js'
9
8
  import {
10
9
  InferSubscriptionMessage,
11
10
  InferSubscriptionParameters,
12
11
  Subscription,
12
+ subscription,
13
13
  } from './subscription.js'
14
14
 
15
15
  describe('Subscription', () => {
16
16
  describe('constructor', () => {
17
17
  it('creates a Subscription instance with all parameters', () => {
18
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
19
- const parameters = new ParamsSchema({
20
- cursor: new OptionalSchema(new IntegerSchema({})),
18
+ const nsid = 'com.atproto.sync.subscribeRepos'
19
+ const parameters = params({
20
+ cursor: optional(integer()),
21
21
  })
22
- const message = new ObjectSchema({
23
- seq: new IntegerSchema({}),
24
- data: new StringSchema({}),
22
+ const message = object({
23
+ seq: integer(),
24
+ data: string(),
25
25
  })
26
26
  const errors = ['ConsumerTooSlow', 'FutureCursor'] as const
27
27
 
28
- const subscription = new Subscription(nsid, parameters, message, errors)
28
+ const mySub = subscription(nsid, parameters, message, errors)
29
29
 
30
- expect(subscription).toBeInstanceOf(Subscription)
31
- expect(subscription.nsid).toBe(nsid)
32
- expect(subscription.parameters).toBe(parameters)
33
- expect(subscription.message).toBe(message)
34
- expect(subscription.errors).toBe(errors)
30
+ expect(mySub).toBeInstanceOf(Subscription)
31
+ expect(mySub.nsid).toBe(nsid)
32
+ expect(mySub.parameters).toBe(parameters)
33
+ expect(mySub.message).toBe(message)
34
+ expect(mySub.errors).toBe(errors)
35
35
  })
36
36
 
37
37
  it('creates a Subscription instance without errors', () => {
38
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
39
- const parameters = new ParamsSchema({
40
- cursor: new OptionalSchema(new IntegerSchema({})),
38
+ const nsid = 'com.atproto.sync.subscribeRepos'
39
+ const parameters = params({
40
+ cursor: optional(integer()),
41
41
  })
42
- const message = new ObjectSchema({
43
- seq: new IntegerSchema({}),
42
+ const message = object({
43
+ seq: integer(),
44
44
  })
45
45
 
46
- const subscription = new Subscription(
47
- nsid,
48
- parameters,
49
- message,
50
- undefined,
51
- )
46
+ const mySub = subscription(nsid, parameters, message, undefined)
52
47
 
53
- expect(subscription).toBeInstanceOf(Subscription)
54
- expect(subscription.nsid).toBe(nsid)
55
- expect(subscription.parameters).toBe(parameters)
56
- expect(subscription.message).toBe(message)
57
- expect(subscription.errors).toBeUndefined()
48
+ expect(mySub).toBeInstanceOf(Subscription)
49
+ expect(mySub.nsid).toBe(nsid)
50
+ expect(mySub.parameters).toBe(parameters)
51
+ expect(mySub.message).toBe(message)
52
+ expect(mySub.errors).toBeUndefined()
58
53
  })
59
54
 
60
55
  it('creates a Subscription instance with empty parameters', () => {
61
- const nsid = asNsidString('app.bsky.notification.subscribe')
62
- const parameters = new ParamsSchema({})
63
- const message = new ObjectSchema({
64
- type: new StringSchema({}),
56
+ const nsid = 'app.bsky.notification.subscribe'
57
+ const parameters = params()
58
+ const message = object({
59
+ type: string(),
65
60
  })
66
61
 
67
- const subscription = new Subscription(
68
- nsid,
69
- parameters,
70
- message,
71
- undefined,
72
- )
62
+ const mySub = subscription(nsid, parameters, message, undefined)
73
63
 
74
- expect(subscription).toBeInstanceOf(Subscription)
75
- expect(subscription.parameters).toBe(parameters)
64
+ expect(mySub).toBeInstanceOf(Subscription)
65
+ expect(mySub.parameters).toBe(parameters)
76
66
  })
77
67
  })
78
68
 
79
69
  describe('type property', () => {
80
70
  it('has type set to "subscription"', () => {
81
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
82
- const parameters = new ParamsSchema({})
83
- const message = new ObjectSchema({
84
- seq: new IntegerSchema({}),
71
+ const nsid = 'com.atproto.sync.subscribeRepos'
72
+ const parameters = params()
73
+ const message = object({
74
+ seq: integer(),
85
75
  })
86
76
 
87
- const subscription = new Subscription(
88
- nsid,
89
- parameters,
90
- message,
91
- undefined,
92
- )
77
+ const mySub = subscription(nsid, parameters, message, undefined)
93
78
 
94
- expect(subscription.type).toBe('subscription')
79
+ expect(mySub.type).toBe('subscription')
95
80
  })
96
81
 
97
82
  it('type is a constant value', () => {
98
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
99
- const parameters = new ParamsSchema({})
100
- const message = new ObjectSchema({
101
- seq: new IntegerSchema({}),
83
+ const nsid = 'com.atproto.sync.subscribeRepos'
84
+ const parameters = params()
85
+ const message = object({
86
+ seq: integer(),
102
87
  })
103
88
 
104
- const subscription = new Subscription(
105
- nsid,
106
- parameters,
107
- message,
108
- undefined,
109
- )
89
+ const mySub = subscription(nsid, parameters, message, undefined)
110
90
 
111
- expect(subscription.type).toBe('subscription')
91
+ expect(mySub.type).toBe('subscription')
112
92
  // TypeScript enforces readonly at compile time
113
- expect(typeof subscription.type).toBe('string')
93
+ expect(typeof mySub.type).toBe('string')
114
94
  })
115
95
  })
116
96
 
117
97
  describe('properties', () => {
118
98
  it('has nsid property', () => {
119
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
120
- const parameters = new ParamsSchema({})
121
- const message = new ObjectSchema({
122
- seq: new IntegerSchema({}),
99
+ const nsid = 'com.atproto.sync.subscribeRepos'
100
+ const parameters = params()
101
+ const message = object({
102
+ seq: integer(),
123
103
  })
124
104
 
125
- const subscription = new Subscription(
126
- nsid,
127
- parameters,
128
- message,
129
- undefined,
130
- )
105
+ const mySub = subscription(nsid, parameters, message, undefined)
131
106
 
132
- expect(subscription.nsid).toBe(nsid)
133
- expect(typeof subscription.nsid).toBe('string')
107
+ expect(mySub.nsid).toBe(nsid)
108
+ expect(typeof mySub.nsid).toBe('string')
134
109
  })
135
110
 
136
111
  it('has parameters property', () => {
137
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
138
- const parameters = new ParamsSchema({})
139
- const message = new ObjectSchema({
140
- seq: new IntegerSchema({}),
112
+ const nsid = 'com.atproto.sync.subscribeRepos'
113
+ const parameters = params()
114
+ const message = object({
115
+ seq: integer(),
141
116
  })
142
117
 
143
- const subscription = new Subscription(
144
- nsid,
145
- parameters,
146
- message,
147
- undefined,
148
- )
118
+ const mySub = subscription(nsid, parameters, message, undefined)
149
119
 
150
- expect(subscription.parameters).toBe(parameters)
151
- expect(subscription.parameters).toBeInstanceOf(ParamsSchema)
120
+ expect(mySub.parameters).toBe(parameters)
121
+ expect(mySub.parameters).toBeInstanceOf(ParamsSchema)
152
122
  })
153
123
 
154
124
  it('has message property', () => {
155
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
156
- const parameters = new ParamsSchema({})
157
- const message = new ObjectSchema({
158
- seq: new IntegerSchema({}),
125
+ const nsid = 'com.atproto.sync.subscribeRepos'
126
+ const parameters = params()
127
+ const message = object({
128
+ seq: integer(),
159
129
  })
160
130
 
161
- const subscription = new Subscription(
162
- nsid,
163
- parameters,
164
- message,
165
- undefined,
166
- )
131
+ const mySub = subscription(nsid, parameters, message, undefined)
167
132
 
168
- expect(subscription.message).toBe(message)
169
- expect(subscription.message).toBeInstanceOf(ObjectSchema)
133
+ expect(mySub.message).toBe(message)
134
+ expect(mySub.message).toBeInstanceOf(ObjectSchema)
170
135
  })
171
136
 
172
137
  it('has errors property', () => {
173
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
174
- const parameters = new ParamsSchema({})
175
- const message = new ObjectSchema({
176
- seq: new IntegerSchema({}),
138
+ const nsid = 'com.atproto.sync.subscribeRepos'
139
+ const parameters = params()
140
+ const message = object({
141
+ seq: integer(),
177
142
  })
178
143
  const errors = ['ConsumerTooSlow'] as const
179
144
 
180
- const subscription = new Subscription(nsid, parameters, message, errors)
145
+ const mySub = subscription(nsid, parameters, message, errors)
181
146
 
182
- expect(subscription.errors).toBe(errors)
183
- expect(Array.isArray(subscription.errors)).toBe(true)
147
+ expect(mySub.errors).toBe(errors)
148
+ expect(Array.isArray(mySub.errors)).toBe(true)
184
149
  })
185
150
  })
186
151
 
187
152
  describe('with complex parameters', () => {
188
153
  it('creates a Subscription with multiple parameter types', () => {
189
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
190
- const parameters = new ParamsSchema({
191
- cursor: new OptionalSchema(new IntegerSchema({ minimum: 0 })),
192
- includeDeletes: new OptionalSchema(
193
- new IntegerSchema({ minimum: 0, maximum: 1 }),
194
- ),
154
+ const nsid = 'com.atproto.sync.subscribeRepos'
155
+ const parameters = params({
156
+ cursor: optional(integer({ minimum: 0 })),
157
+ includeDeletes: optional(integer({ minimum: 0, maximum: 1 })),
195
158
  })
196
- const message = new ObjectSchema({
197
- seq: new IntegerSchema({}),
198
- data: new StringSchema({}),
159
+ const message = object({
160
+ seq: integer(),
161
+ data: string(),
199
162
  })
200
163
  const errors = ['ConsumerTooSlow', 'FutureCursor'] as const
201
164
 
202
- const subscription = new Subscription(nsid, parameters, message, errors)
165
+ const mySub = subscription(nsid, parameters, message, errors)
203
166
 
204
- expect(subscription).toBeInstanceOf(Subscription)
205
- expect(subscription.parameters).toBe(parameters)
206
- expect(subscription.errors).toEqual(['ConsumerTooSlow', 'FutureCursor'])
167
+ expect(mySub).toBeInstanceOf(Subscription)
168
+ expect(mySub.parameters).toBe(parameters)
169
+ expect(mySub.errors).toEqual(['ConsumerTooSlow', 'FutureCursor'])
207
170
  })
208
171
  })
209
172
 
210
173
  describe('with various message types', () => {
211
174
  it('creates a Subscription with ObjectSchema message', () => {
212
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
213
- const parameters = new ParamsSchema({})
214
- const message = new ObjectSchema({
215
- seq: new IntegerSchema({}),
216
- data: new StringSchema({}),
217
- })
218
-
219
- const subscription = new Subscription(
220
- nsid,
221
- parameters,
222
- message,
175
+ const mySub = subscription(
176
+ 'com.atproto.sync.subscribeRepos',
177
+ params(),
178
+ object({
179
+ seq: integer(),
180
+ data: string(),
181
+ }),
223
182
  undefined,
224
183
  )
225
184
 
226
- expect(subscription).toBeInstanceOf(Subscription)
227
- expect(subscription.message).toBeInstanceOf(ObjectSchema)
185
+ expect(mySub).toBeInstanceOf(Subscription)
186
+ expect(mySub.message).toBeInstanceOf(ObjectSchema)
228
187
  })
229
188
 
230
189
  it('creates a Subscription with RefSchema message', () => {
231
- const nsid = asNsidString('app.bsky.feed.subscribe')
232
- const parameters = new ParamsSchema({})
233
- const message = new RefSchema(() => new StringSchema({}))
234
-
235
- const subscription = new Subscription(
236
- nsid,
237
- parameters,
238
- message,
190
+ const message = string()
191
+ const mySub = subscription(
192
+ 'app.bsky.feed.subscribe',
193
+ params(),
194
+ ref(() => message),
239
195
  undefined,
240
196
  )
241
197
 
242
- expect(subscription).toBeInstanceOf(Subscription)
243
- expect(subscription.message).toBeInstanceOf(RefSchema)
198
+ expect(mySub).toBeInstanceOf(Subscription)
199
+ expect(mySub.message).toBeInstanceOf(RefSchema)
244
200
  })
245
201
  })
246
202
 
247
203
  describe('with different error configurations', () => {
248
204
  it('creates a Subscription with a single error', () => {
249
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
250
- const parameters = new ParamsSchema({})
251
- const message = new ObjectSchema({})
252
- const errors = ['ConsumerTooSlow'] as const
253
-
254
- const subscription = new Subscription(nsid, parameters, message, errors)
205
+ const mySub = subscription(
206
+ 'com.atproto.sync.subscribeRepos',
207
+ params(),
208
+ object({}),
209
+ ['ConsumerTooSlow'],
210
+ )
255
211
 
256
- expect(subscription.errors).toEqual(['ConsumerTooSlow'])
212
+ expect(mySub.errors).toEqual(['ConsumerTooSlow'])
257
213
  })
258
214
 
259
215
  it('creates a Subscription with multiple errors', () => {
260
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
261
- const parameters = new ParamsSchema({})
262
- const message = new ObjectSchema({})
263
- const errors = [
264
- 'ConsumerTooSlow',
265
- 'FutureCursor',
266
- 'InvalidCursor',
267
- ] as const
216
+ const mySub = subscription(
217
+ 'com.atproto.sync.subscribeRepos',
218
+ params(),
219
+ object({}),
220
+ ['ConsumerTooSlow', 'FutureCursor', 'InvalidCursor'],
221
+ )
268
222
 
269
- const subscription = new Subscription(nsid, parameters, message, errors)
223
+ expectTypeOf<
224
+ readonly ['ConsumerTooSlow', 'FutureCursor', 'InvalidCursor']
225
+ >(mySub.errors)
270
226
 
271
- expect(subscription.errors).toEqual([
227
+ expect(mySub.errors).toEqual([
272
228
  'ConsumerTooSlow',
273
229
  'FutureCursor',
274
230
  'InvalidCursor',
@@ -276,167 +232,129 @@ describe('Subscription', () => {
276
232
  })
277
233
 
278
234
  it('creates a Subscription with empty errors array', () => {
279
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
280
- const parameters = new ParamsSchema({})
281
- const message = new ObjectSchema({})
282
- const errors = [] as const
283
-
284
- const subscription = new Subscription(nsid, parameters, message, errors)
235
+ const mySub = subscription(
236
+ 'com.atproto.sync.subscribeRepos',
237
+ params(),
238
+ object({}),
239
+ [],
240
+ )
285
241
 
286
- expect(subscription.errors).toEqual([])
242
+ expect(mySub.errors).toEqual([])
287
243
  })
288
244
  })
289
245
 
290
246
  describe('type inference', () => {
291
247
  it('InferSubscriptionParameters correctly infers parameter types', () => {
292
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
293
- const parameters = new ParamsSchema({
294
- cursor: new OptionalSchema(new IntegerSchema({})),
295
- })
296
- const message = new ObjectSchema({
297
- seq: new IntegerSchema({}),
298
- })
299
-
300
- const subscription = new Subscription(
301
- nsid,
302
- parameters,
303
- message,
304
- undefined,
248
+ const mySub = subscription(
249
+ 'com.atproto.sync.subscribeRepos',
250
+ params({
251
+ cursor: optional(integer()),
252
+ }),
253
+ object({
254
+ seq: integer(),
255
+ }),
305
256
  )
306
257
 
307
- type Params = InferSubscriptionParameters<typeof subscription>
258
+ type Params = InferSubscriptionParameters<typeof mySub>
308
259
 
309
- // Type-level test - this should compile without errors
310
- const params: Params = {
260
+ expectTypeOf<Params>({
311
261
  cursor: 12345,
312
- }
313
-
314
- expect(params.cursor).toBeDefined()
262
+ })
315
263
  })
316
264
 
317
265
  it('InferSubscriptionMessage correctly infers message type', () => {
318
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
319
- const parameters = new ParamsSchema({})
320
- const message = new ObjectSchema({
321
- seq: new IntegerSchema({}),
322
- data: new StringSchema({}),
266
+ const nsid = 'com.atproto.sync.subscribeRepos'
267
+ const parameters = params()
268
+ const message = object({
269
+ seq: integer(),
270
+ data: string(),
323
271
  })
324
272
 
325
- const subscription = new Subscription(
326
- nsid,
327
- parameters,
328
- message,
329
- undefined,
330
- )
273
+ const mySub = subscription(nsid, parameters, message, undefined)
331
274
 
332
- type Message = InferSubscriptionMessage<typeof subscription>
275
+ type Message = InferSubscriptionMessage<typeof mySub>
333
276
 
334
- // Type-level test - this should compile without errors
335
- const msg: Message = {
277
+ expectTypeOf<Message>({
336
278
  seq: 12345,
337
279
  data: 'test data',
338
- }
339
-
340
- expect(msg.seq).toBeDefined()
341
- expect(msg.data).toBeDefined()
280
+ })
342
281
  })
343
282
  })
344
283
 
345
284
  describe('edge cases', () => {
346
285
  it('handles very long NSID', () => {
347
- const nsid = asNsidString(
348
- 'com.example.very.long.namespace.identifier.subscription.name',
349
- )
350
- const parameters = new ParamsSchema({})
351
- const message = new ObjectSchema({})
286
+ const nsid =
287
+ 'com.example.very.long.namespace.identifier.subscription.name'
288
+ const parameters = params()
289
+ const message = object({})
352
290
 
353
- const subscription = new Subscription(
354
- nsid,
355
- parameters,
356
- message,
357
- undefined,
358
- )
291
+ const mySub = subscription(nsid, parameters, message, undefined)
359
292
 
360
- expect(subscription.nsid).toBe(nsid)
293
+ expect(mySub.nsid).toBe(nsid)
361
294
  })
362
295
 
363
296
  it('handles subscription with all optional parameters', () => {
364
- const nsid = asNsidString('app.bsky.feed.subscribe')
365
- const parameters = new ParamsSchema({
366
- cursor: new OptionalSchema(new IntegerSchema({})),
367
- includeDeletes: new OptionalSchema(new IntegerSchema({})),
368
- includeEdits: new OptionalSchema(new IntegerSchema({})),
297
+ const nsid = 'app.bsky.feed.subscribe'
298
+ const parameters = params({
299
+ cursor: optional(integer()),
300
+ includeDeletes: optional(integer()),
301
+ includeEdits: optional(integer()),
369
302
  })
370
- const message = new ObjectSchema({})
303
+ const message = object({})
371
304
 
372
- const subscription = new Subscription(
373
- nsid,
374
- parameters,
375
- message,
376
- undefined,
377
- )
305
+ const mySub = subscription(nsid, parameters, message, undefined)
378
306
 
379
- expect(subscription.parameters).toBe(parameters)
307
+ expect(mySub.parameters).toBe(parameters)
380
308
  })
381
309
 
382
310
  it('handles subscription with complex nested message schema', () => {
383
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
384
- const parameters = new ParamsSchema({})
385
- const message = new ObjectSchema({
386
- seq: new IntegerSchema({}),
387
- blocks: new ObjectSchema({
388
- cid: new StringSchema({ format: 'cid' }),
389
- data: new ObjectSchema({
390
- uri: new StringSchema({ format: 'at-uri' }),
391
- content: new StringSchema({}),
311
+ const nsid = 'com.atproto.sync.subscribeRepos'
312
+ const parameters = params()
313
+ const message = object({
314
+ seq: integer(),
315
+ blocks: object({
316
+ cid: string({ format: 'cid' }),
317
+ data: object({
318
+ uri: string({ format: 'at-uri' }),
319
+ content: string(),
392
320
  }),
393
321
  }),
394
322
  })
395
323
 
396
- const subscription = new Subscription(
397
- nsid,
398
- parameters,
399
- message,
400
- undefined,
401
- )
324
+ const mySub = subscription(nsid, parameters, message, undefined)
402
325
 
403
- expect(subscription.message).toBeInstanceOf(ObjectSchema)
326
+ expect(mySub.message).toBeInstanceOf(ObjectSchema)
404
327
  })
405
328
  })
406
329
 
407
330
  describe('real-world subscription examples', () => {
408
331
  it('creates a subscribeLabels subscription', () => {
409
- const nsid = asNsidString('com.atproto.label.subscribeLabels')
410
- const parameters = new ParamsSchema({
411
- cursor: new OptionalSchema(new IntegerSchema({ minimum: 0 })),
332
+ const nsid = 'com.atproto.label.subscribeLabels'
333
+ const parameters = params({
334
+ cursor: optional(integer({ minimum: 0 })),
412
335
  })
413
- const message = new ObjectSchema({
414
- seq: new IntegerSchema({}),
415
- labels: new ObjectSchema({
416
- uri: new StringSchema({ format: 'uri' }),
417
- val: new StringSchema({}),
336
+ const message = object({
337
+ seq: integer(),
338
+ labels: object({
339
+ uri: string({ format: 'uri' }),
340
+ val: string(),
418
341
  }),
419
342
  })
420
343
 
421
- const subscription = new Subscription(
422
- nsid,
423
- parameters,
424
- message,
425
- undefined,
426
- )
344
+ const mySub = subscription(nsid, parameters, message, undefined)
427
345
 
428
- expect(subscription.type).toBe('subscription')
429
- expect(subscription.nsid).toBe('com.atproto.label.subscribeLabels')
430
- expect(subscription.parameters.matches({ cursor: 10 })).toBe(true)
431
- expect(subscription.parameters.matches({ cursor: -10 })).toBe(false)
346
+ expect(mySub.type).toBe('subscription')
347
+ expect(mySub.nsid).toBe('com.atproto.label.subscribeLabels')
348
+ expect(mySub.parameters.matches({ cursor: 10 })).toBe(true)
349
+ expect(mySub.parameters.matches({ cursor: -10 })).toBe(false)
432
350
  expect(
433
- subscription.message.matches({
351
+ mySub.message.matches({
434
352
  seq: 1,
435
353
  labels: { uri: 'http://foo.com', val: 'test' },
436
354
  }),
437
355
  ).toBe(true)
438
356
  expect(
439
- subscription.message.matches({
357
+ mySub.message.matches({
440
358
  seq: 1,
441
359
  labels: { uri: 'http://foo.com', val: 3 },
442
360
  }),
@@ -444,110 +362,84 @@ describe('Subscription', () => {
444
362
  })
445
363
 
446
364
  it('creates a notification subscription', () => {
447
- const nsid = asNsidString('app.bsky.notification.subscribe')
448
- const parameters = new ParamsSchema({
449
- cursor: new OptionalSchema(new StringSchema({})),
365
+ const nsid = 'app.bsky.notification.subscribe'
366
+ const parameters = params({
367
+ cursor: optional(string()),
450
368
  })
451
- const message = new ObjectSchema({
452
- type: new StringSchema({}),
453
- uri: new StringSchema({ format: 'at-uri' }),
454
- cid: new StringSchema({ format: 'cid' }),
369
+ const message = object({
370
+ type: string(),
371
+ uri: string({ format: 'at-uri' }),
372
+ cid: string({ format: 'cid' }),
455
373
  })
456
374
 
457
- const subscription = new Subscription(
458
- nsid,
459
- parameters,
460
- message,
461
- undefined,
462
- )
375
+ const mySub = subscription(nsid, parameters, message, undefined)
463
376
 
464
- expect(subscription.type).toBe('subscription')
465
- expect(subscription.nsid).toBe('app.bsky.notification.subscribe')
377
+ expect(mySub.type).toBe('subscription')
378
+ expect(mySub.nsid).toBe('app.bsky.notification.subscribe')
466
379
  })
467
380
  })
468
381
 
469
382
  describe('with mixed parameter and message types', () => {
470
383
  it('handles required and optional parameters with complex message', () => {
471
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
472
- const parameters = new ParamsSchema({
473
- cursor: new OptionalSchema(new IntegerSchema({ minimum: 0 })),
474
- includeDeletes: new OptionalSchema(
475
- new IntegerSchema({ minimum: 0, maximum: 1 }),
476
- ),
384
+ const nsid = 'com.atproto.sync.subscribeRepos'
385
+ const parameters = params({
386
+ cursor: optional(integer({ minimum: 0 })),
387
+ includeDeletes: optional(integer({ minimum: 0, maximum: 1 })),
477
388
  })
478
- const message = new ObjectSchema({
479
- seq: new IntegerSchema({}),
480
- rebase: new OptionalSchema(
481
- new IntegerSchema({ minimum: 0, maximum: 1 }),
482
- ),
483
- tooBig: new OptionalSchema(
484
- new IntegerSchema({ minimum: 0, maximum: 1 }),
485
- ),
486
- repo: new StringSchema({ format: 'did' }),
487
- commit: new StringSchema({ format: 'cid' }),
488
- blocks: new StringSchema({}),
489
- ops: new ObjectSchema({}),
389
+ const message = object({
390
+ seq: integer(),
391
+ rebase: optional(integer({ minimum: 0, maximum: 1 })),
392
+ tooBig: optional(integer({ minimum: 0, maximum: 1 })),
393
+ repo: string({ format: 'did' }),
394
+ commit: string({ format: 'cid' }),
395
+ blocks: string(),
396
+ ops: object({}),
490
397
  })
491
398
 
492
- const subscription = new Subscription(
493
- nsid,
494
- parameters,
495
- message,
496
- undefined,
497
- )
399
+ const mySub = subscription(nsid, parameters, message, undefined)
498
400
 
499
- expect(subscription.type).toBe('subscription')
500
- expect(subscription.parameters).toBe(parameters)
501
- expect(subscription.message).toBe(message)
401
+ expect(mySub.type).toBe('subscription')
402
+ expect(mySub.parameters).toBe(parameters)
403
+ expect(mySub.message).toBe(message)
502
404
  })
503
405
  })
504
406
 
505
407
  describe('validation through nested schemas', () => {
506
408
  it('parameters can validate input through ParamsSchema', () => {
507
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
508
- const parameters = new ParamsSchema({
509
- cursor: new IntegerSchema({ minimum: 0 }),
409
+ const nsid = 'com.atproto.sync.subscribeRepos'
410
+ const parameters = params({
411
+ cursor: integer({ minimum: 0 }),
510
412
  })
511
- const message = new ObjectSchema({})
413
+ const message = object({})
512
414
 
513
- const subscription = new Subscription(
514
- nsid,
515
- parameters,
516
- message,
517
- undefined,
518
- )
415
+ const mySub = subscription(nsid, parameters, message, undefined)
519
416
 
520
417
  // Test that the parameters schema can validate
521
- const validResult = subscription.parameters.safeParse({ cursor: 100 })
418
+ const validResult = mySub.parameters.safeParse({ cursor: 100 })
522
419
  expect(validResult.success).toBe(true)
523
420
 
524
- const invalidResult = subscription.parameters.safeParse({ cursor: -1 })
421
+ const invalidResult = mySub.parameters.safeParse({ cursor: -1 })
525
422
  expect(invalidResult.success).toBe(false)
526
423
  })
527
424
 
528
425
  it('message can validate input through ObjectSchema', () => {
529
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
530
- const parameters = new ParamsSchema({})
531
- const message = new ObjectSchema({
532
- seq: new IntegerSchema({ minimum: 0 }),
533
- data: new StringSchema({ minLength: 1 }),
426
+ const nsid = 'com.atproto.sync.subscribeRepos'
427
+ const parameters = params()
428
+ const message = object({
429
+ seq: integer({ minimum: 0 }),
430
+ data: string({ minLength: 1 }),
534
431
  })
535
432
 
536
- const subscription = new Subscription(
537
- nsid,
538
- parameters,
539
- message,
540
- undefined,
541
- )
433
+ const mySub = subscription(nsid, parameters, message, undefined)
542
434
 
543
435
  // Test that the message schema can validate
544
- const validResult = subscription.message.safeParse({
436
+ const validResult = mySub.message.safeParse({
545
437
  seq: 100,
546
438
  data: 'test',
547
439
  })
548
440
  expect(validResult.success).toBe(true)
549
441
 
550
- const invalidResult = subscription.message.safeParse({
442
+ const invalidResult = mySub.message.safeParse({
551
443
  seq: -1,
552
444
  data: '',
553
445
  })
@@ -557,71 +449,51 @@ describe('Subscription', () => {
557
449
 
558
450
  describe('property access', () => {
559
451
  it('can access nsid after construction', () => {
560
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
561
- const parameters = new ParamsSchema({})
562
- const message = new ObjectSchema({})
563
-
564
- const subscription = new Subscription(
565
- nsid,
566
- parameters,
567
- message,
568
- undefined,
569
- )
452
+ const nsid = 'com.atproto.sync.subscribeRepos'
453
+ const parameters = params()
454
+ const message = object({})
455
+
456
+ const mySub = subscription(nsid, parameters, message, undefined)
570
457
 
571
- expect(subscription.nsid).toBe(nsid)
572
- expect(subscription.nsid).toBe('com.atproto.sync.subscribeRepos')
458
+ expect(mySub.nsid).toBe(nsid)
459
+ expect(mySub.nsid).toBe('com.atproto.sync.subscribeRepos')
573
460
  })
574
461
 
575
462
  it('can access type after construction', () => {
576
- const nsid = asNsidString('com.atproto.sync.subscribeRepos')
577
- const parameters = new ParamsSchema({})
578
- const message = new ObjectSchema({})
579
-
580
- const subscription = new Subscription(
581
- nsid,
582
- parameters,
583
- message,
584
- undefined,
585
- )
463
+ const nsid = 'com.atproto.sync.subscribeRepos'
464
+ const parameters = params()
465
+ const message = object({})
586
466
 
587
- expect(subscription.type).toBe('subscription')
588
- expect(typeof subscription.type).toBe('string')
467
+ const mySub = subscription(nsid, parameters, message, undefined)
468
+
469
+ expect(mySub.type).toBe('subscription')
470
+ expect(typeof mySub.type).toBe('string')
589
471
  })
590
472
  })
591
473
 
592
474
  describe('different message schema types', () => {
593
475
  it('constructs with ObjectSchema message', () => {
594
- const nsid = asNsidString('app.bsky.test')
595
- const parameters = new ParamsSchema({})
596
- const message = new ObjectSchema({
597
- field: new StringSchema({}),
476
+ const nsid = 'app.bsky.test'
477
+ const parameters = params()
478
+ const message = object({
479
+ field: string(),
598
480
  })
599
481
 
600
- const subscription = new Subscription(
601
- nsid,
602
- parameters,
603
- message,
604
- undefined,
605
- )
482
+ const mySub = subscription(nsid, parameters, message, undefined)
606
483
 
607
- expect(subscription.message).toBeInstanceOf(ObjectSchema)
608
- expect(subscription.message).toBe(message)
484
+ expect(mySub.message).toBeInstanceOf(ObjectSchema)
485
+ expect(mySub.message).toBe(message)
609
486
  })
610
487
 
611
488
  it('constructs with RefSchema message', () => {
612
- const nsid = asNsidString('app.bsky.test')
613
- const parameters = new ParamsSchema({})
614
- const message = new RefSchema(() => new ObjectSchema({}))
615
-
616
- const subscription = new Subscription(
617
- nsid,
618
- parameters,
619
- message,
620
- undefined,
621
- )
489
+ const nsid = 'app.bsky.test'
490
+ const parameters = params()
491
+ const message = ref(() => object({}))
492
+
493
+ const mySub = subscription(nsid, parameters, message, undefined)
622
494
 
623
- expect(subscription.message).toBeInstanceOf(RefSchema)
624
- expect(subscription.message).toBe(message)
495
+ expect(mySub.message).toBeInstanceOf(RefSchema)
496
+ expect(mySub.message).toBe(message)
625
497
  })
626
498
  })
627
499
  })