jazz-tools 0.7.0-alpha.8 → 0.7.1

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 (72) hide show
  1. package/.eslintrc.cjs +3 -10
  2. package/.prettierrc.js +9 -0
  3. package/.turbo/turbo-build.log +3 -19
  4. package/.turbo/turbo-lint.log +4 -0
  5. package/.turbo/turbo-test.log +140 -0
  6. package/CHANGELOG.md +304 -0
  7. package/README.md +10 -2
  8. package/dist/coValues/account.js +59 -41
  9. package/dist/coValues/account.js.map +1 -1
  10. package/dist/coValues/coList.js +49 -46
  11. package/dist/coValues/coList.js.map +1 -1
  12. package/dist/coValues/coMap.js +143 -44
  13. package/dist/coValues/coMap.js.map +1 -1
  14. package/dist/coValues/coStream.js +144 -35
  15. package/dist/coValues/coStream.js.map +1 -1
  16. package/dist/coValues/deepLoading.js +60 -0
  17. package/dist/coValues/deepLoading.js.map +1 -0
  18. package/dist/coValues/extensions/imageDef.js +10 -7
  19. package/dist/coValues/extensions/imageDef.js.map +1 -1
  20. package/dist/coValues/group.js +49 -13
  21. package/dist/coValues/group.js.map +1 -1
  22. package/dist/coValues/interfaces.js +70 -31
  23. package/dist/coValues/interfaces.js.map +1 -1
  24. package/dist/implementation/devtoolsFormatters.js +114 -0
  25. package/dist/implementation/devtoolsFormatters.js.map +1 -0
  26. package/dist/implementation/refs.js +58 -18
  27. package/dist/implementation/refs.js.map +1 -1
  28. package/dist/implementation/schema.js +58 -0
  29. package/dist/implementation/schema.js.map +1 -0
  30. package/dist/implementation/subscriptionScope.js +19 -1
  31. package/dist/implementation/subscriptionScope.js.map +1 -1
  32. package/dist/implementation/symbols.js +5 -0
  33. package/dist/implementation/symbols.js.map +1 -0
  34. package/dist/index.js +3 -5
  35. package/dist/index.js.map +1 -1
  36. package/dist/internal.js +5 -2
  37. package/dist/internal.js.map +1 -1
  38. package/dist/tests/coList.test.js +51 -48
  39. package/dist/tests/coList.test.js.map +1 -1
  40. package/dist/tests/coMap.test.js +131 -73
  41. package/dist/tests/coMap.test.js.map +1 -1
  42. package/dist/tests/coStream.test.js +56 -41
  43. package/dist/tests/coStream.test.js.map +1 -1
  44. package/dist/tests/deepLoading.test.js +188 -0
  45. package/dist/tests/deepLoading.test.js.map +1 -0
  46. package/dist/tests/groupsAndAccounts.test.js +83 -0
  47. package/dist/tests/groupsAndAccounts.test.js.map +1 -0
  48. package/package.json +17 -9
  49. package/src/coValues/account.ts +113 -125
  50. package/src/coValues/coList.ts +87 -103
  51. package/src/coValues/coMap.ts +200 -147
  52. package/src/coValues/coStream.ts +264 -80
  53. package/src/coValues/deepLoading.ts +229 -0
  54. package/src/coValues/extensions/imageDef.ts +17 -13
  55. package/src/coValues/group.ts +92 -58
  56. package/src/coValues/interfaces.ts +215 -115
  57. package/src/implementation/devtoolsFormatters.ts +110 -0
  58. package/src/implementation/inspect.ts +1 -1
  59. package/src/implementation/refs.ts +80 -28
  60. package/src/implementation/schema.ts +138 -0
  61. package/src/implementation/subscriptionScope.ts +48 -12
  62. package/src/implementation/symbols.ts +11 -0
  63. package/src/index.ts +12 -8
  64. package/src/internal.ts +7 -3
  65. package/src/tests/coList.test.ts +77 -62
  66. package/src/tests/coMap.test.ts +201 -113
  67. package/src/tests/coStream.test.ts +113 -84
  68. package/src/tests/deepLoading.test.ts +301 -0
  69. package/src/tests/groupsAndAccounts.test.ts +91 -0
  70. package/dist/implementation/encoding.js +0 -26
  71. package/dist/implementation/encoding.js.map +0 -1
  72. package/src/implementation/encoding.ts +0 -105
@@ -1,7 +1,7 @@
1
- import { Effect, Sink, Stream } from "effect";
1
+ import { Effect, Option, Sink, Stream } from "effect";
2
2
  import type { CojsonInternalTypes, RawCoValue } from "cojson";
3
3
  import { RawAccount } from "cojson";
4
- import type { Me, UnavailableError } from "../internal.js";
4
+ import type { DeeplyLoaded, DepthsIn, UnavailableError } from "../internal.js";
5
5
  import {
6
6
  Account,
7
7
  AccountCtx,
@@ -9,200 +9,290 @@ import {
9
9
  SubscriptionScope,
10
10
  Ref,
11
11
  inspect,
12
+ subscriptionsScopes,
12
13
  } from "../internal.js";
14
+ import { fulfillsDepth } from "./deepLoading.js";
13
15
 
14
- export type SubclassedConstructor<T> = {
16
+ export type ClassOf<T> = {
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
18
  new (...args: any[]): T;
16
19
  };
17
20
 
21
+ /** @category Abstract interfaces */
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
23
  export interface CoValueClass<Value extends CoValue = CoValue, Init = any> {
19
- /** @category Construction and loading */
20
24
  new (init: Init, options: { owner: Account | Group }): Value;
21
25
 
22
26
  /** @ignore */
23
27
  fromRaw(raw: Value["_raw"]): Value;
24
28
 
25
- /** @category Construction and loading */
26
- load<V extends Value>(
27
- this: SubclassedConstructor<V>,
29
+ /** @category Subscription & Loading */
30
+ load<V extends Value, Depth>(
31
+ this: ClassOf<V>,
28
32
  id: ID<V>,
29
- options: {
30
- as: Account & Me;
31
- onProgress?: (progress: number) => void;
32
- }
33
- ): Promise<V | undefined>;
33
+ as: Account,
34
+ depth: Depth & DepthsIn<V>,
35
+ ): Promise<DeeplyLoaded<V, Depth> | undefined>;
36
+ /** @category Subscription & Loading */
37
+ load<V extends Value, Depth>(
38
+ this: ClassOf<V>,
39
+ existing: V,
40
+ depth: Depth & DepthsIn<V>,
41
+ ): Promise<DeeplyLoaded<V, Depth> | undefined>;
34
42
 
35
- /** @category Construction and loading */
36
- loadEf<V extends Value>(
37
- this: SubclassedConstructor<V>,
38
- id: ID<V>
39
- ): Effect.Effect<V, UnavailableError, AccountCtx>;
43
+ /** @category Subscription & Loading */
44
+ loadEf<V extends Value, Depth>(
45
+ this: ClassOf<V>,
46
+ id: ID<V>,
47
+ depth: Depth & DepthsIn<V>,
48
+ ): Effect.Effect<DeeplyLoaded<V, Depth>, UnavailableError, AccountCtx>;
40
49
 
41
- /** @category Subscription */
42
- subscribe<V extends Value, Acc extends Account>(
43
- this: SubclassedConstructor<V>,
50
+ /** @category Subscription & Loading */
51
+ subscribe<V extends Value, Depth>(
52
+ this: ClassOf<V>,
44
53
  id: ID<V>,
45
- options: { as: Acc & Me },
46
- onUpdate: (value: V) => void
54
+ as: Account,
55
+ depth: Depth & DepthsIn<V>,
56
+ listener: (value: DeeplyLoaded<V, Depth>) => void,
57
+ ): () => void;
58
+ subscribe<V extends Value, Depth>(
59
+ this: ClassOf<V>,
60
+ existing: V,
61
+ depth: Depth & DepthsIn<V>,
62
+ listener: (value: DeeplyLoaded<V, Depth>) => void,
47
63
  ): () => void;
48
64
 
49
- /** @category Subscription */
50
- subscribeEf<V extends Value>(
51
- this: SubclassedConstructor<V>,
52
- id: ID<V>
53
- ): Stream.Stream<V, UnavailableError, AccountCtx>;
65
+ /** @category Subscription & Loading */
66
+ subscribeEf<V extends Value, Depth>(
67
+ this: ClassOf<V>,
68
+ id: ID<V>,
69
+ depth: Depth & DepthsIn<V>,
70
+ ): Stream.Stream<DeeplyLoaded<V, Depth>, UnavailableError, AccountCtx>;
54
71
  }
55
72
 
56
- /** @category Schemas & CoValues - Abstract interfaces */
73
+ /** @category Abstract interfaces */
74
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
75
  export interface CoValue<Type extends string = string, Raw = any> {
58
- /** @category Value identity */
76
+ /** @category Content */
59
77
  readonly id: ID<this>;
60
- /** @category Value identity */
78
+ /** @category Type Helpers */
61
79
  _type: Type;
62
80
  /** @category Collaboration */
63
81
  _owner: Account | Group;
64
- /** @category Subscription */
65
- subscribe(listener: (update: this) => void): () => void;
66
- /** @category Subscription */
67
- subscribeEf(): Stream.Stream<this, UnavailableError, never>;
68
82
  /** @category Internals */
69
83
  _raw: Raw;
70
- /** @category Internals */
71
- readonly _loadedAs: Account & Me;
72
- /** @category Stringifying & inspection */
84
+ /** @internal */
85
+ readonly _loadedAs: Account;
86
+ /** @category Stringifying & Inspection */
87
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
73
88
  toJSON(): any[] | object;
74
- /** @category Stringifying & inspection */
89
+ /** @category Stringifying & Inspection */
90
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
91
  [inspect](): any;
76
92
  }
77
93
 
94
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
78
95
  export function isCoValue(value: any): value is CoValue {
79
96
  return value && value._type !== undefined;
80
97
  }
81
98
 
82
- /** @category Schemas & CoValues - Abstract interfaces */
83
- export type ID<T> = CojsonInternalTypes.RawCoID & {
84
- readonly __type: T;
85
- };
99
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
100
+ export function isCoValueClass(value: any): value is CoValueClass {
101
+ return typeof value === "function" && value.fromRaw !== undefined;
102
+ }
103
+
104
+ /** @category CoValues */
105
+ export type ID<T> = CojsonInternalTypes.RawCoID & IDMarker<T>;
106
+
107
+ type IDMarker<out T> = { __type(_: never): T };
86
108
 
109
+ /** @internal */
87
110
  export class CoValueBase implements CoValue {
88
111
  id!: ID<this>;
89
112
  _type!: string;
90
113
  _raw!: RawCoValue;
114
+ _instanceID!: string;
91
115
 
92
116
  get _owner(): Account | Group {
93
- return this._raw.group instanceof RawAccount
94
- ? Account.fromRaw(this._raw.group)
95
- : Group.fromRaw(this._raw.group);
117
+ const owner =
118
+ this._raw.group instanceof RawAccount
119
+ ? Account.fromRaw(this._raw.group)
120
+ : Group.fromRaw(this._raw.group);
121
+
122
+ const subScope = subscriptionsScopes.get(this);
123
+ if (subScope) {
124
+ subScope.onRefAccessedOrSet(this.id, owner.id);
125
+ subscriptionsScopes.set(owner, subScope);
126
+ }
127
+
128
+ return owner;
96
129
  }
97
130
 
131
+ /** @private */
98
132
  get _loadedAs() {
99
133
  return Account.fromNode(this._raw.core.node);
100
134
  }
101
135
 
102
- constructor(..._args: any) {}
136
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
137
+ constructor(..._args: any) {
138
+ Object.defineProperty(this, "_instanceID", {
139
+ value: `instance-${Math.random().toString(36).slice(2)}`,
140
+ enumerable: false,
141
+ });
142
+ }
103
143
 
104
- static fromRaw<V extends CoValue>(
105
- this: SubclassedConstructor<V>,
106
- raw: RawCoValue
107
- ): V {
108
- return new this(undefined, { fromRaw: raw });
144
+ /** @category Internals */
145
+ static fromRaw<V extends CoValue>(this: ClassOf<V>, raw: RawCoValue): V {
146
+ return new this({ fromRaw: raw });
109
147
  }
110
148
 
111
- static loadEf<V extends CoValue>(
112
- this: SubclassedConstructor<V> & typeof CoValueBase,
113
- id: ID<V>
114
- ): Effect.Effect<V, UnavailableError, AccountCtx> {
115
- return Effect.gen(this, function* (_) {
116
- const account = yield* _(AccountCtx);
117
- return yield* _(
118
- new Ref(id as ID<V>, account, {
119
- ref: () => this as CoValueClass<V>,
120
- }).loadEf()
121
- );
122
- });
149
+ /** @category Subscription & Loading */
150
+ static load<V extends CoValue, Depth>(
151
+ this: ClassOf<V> & typeof CoValueBase,
152
+ id: ID<V>,
153
+ as: Account,
154
+ depth: Depth & DepthsIn<V>,
155
+ ): Promise<DeeplyLoaded<V, Depth> | undefined>;
156
+ /** @category Subscription & Loading */
157
+ static load<V extends CoValue, Depth>(
158
+ this: ClassOf<V> & typeof CoValueBase,
159
+ existing: V,
160
+ depth: Depth & DepthsIn<V>,
161
+ ): Promise<DeeplyLoaded<V, Depth> | undefined>;
162
+ static load<V extends CoValue, Depth>(
163
+ this: ClassOf<V> & typeof CoValueBase,
164
+
165
+ ...args:
166
+ | [ID<V>, Account, Depth & DepthsIn<V>]
167
+ | [V, Depth & DepthsIn<V>]
168
+ ): Promise<DeeplyLoaded<V, Depth> | undefined> {
169
+ const { id, as, depth } =
170
+ args.length === 3
171
+ ? { id: args[0], as: args[1], depth: args[2] }
172
+ : { id: args[0].id, as: args[0]._loadedAs, depth: args[1] };
173
+ return Effect.runPromise(
174
+ this.loadEf(id, depth).pipe(
175
+ Effect.mapError(() => undefined),
176
+ Effect.merge,
177
+ Effect.provideService(AccountCtx, as),
178
+ ),
179
+ );
123
180
  }
124
181
 
125
- static load<V extends CoValue>(
126
- this: SubclassedConstructor<V> & typeof CoValueBase,
182
+ /** @category Subscription & Loading */
183
+ static loadEf<V extends CoValue, Depth>(
184
+ this: ClassOf<V> & typeof CoValueBase,
127
185
  id: ID<V>,
128
- options: {
129
- as: Account & Me;
130
- onProgress?: (progress: number) => void;
131
- }
132
- ): Promise<V | undefined> {
133
- return new Ref(id as ID<V>, options.as, {
134
- ref: () => this as CoValueClass<V>,
135
- }).load(options?.onProgress && { onProgress: options.onProgress });
186
+ depth: Depth & DepthsIn<V>,
187
+ ): Effect.Effect<DeeplyLoaded<V, Depth>, UnavailableError, AccountCtx> {
188
+ return this.subscribeEf(id, depth).pipe(
189
+ Stream.runHead,
190
+ Effect.andThen(
191
+ Effect.mapError((_noSuchElem) => "unavailable" as const),
192
+ ),
193
+ );
136
194
  }
137
195
 
138
- static subscribe<V extends CoValue, Acc extends Account>(
139
- this: SubclassedConstructor<V> & typeof CoValueBase,
196
+ /** @category Subscription & Loading */
197
+ static subscribe<V extends CoValue, Depth>(
198
+ this: ClassOf<V> & typeof CoValueBase,
140
199
  id: ID<V>,
141
- options: { as: Acc & Me },
142
- onUpdate: (value: V) => void
200
+ as: Account,
201
+ depth: Depth & DepthsIn<V>,
202
+ listener: (value: DeeplyLoaded<V, Depth>) => void,
203
+ ): () => void;
204
+ static subscribe<V extends CoValue, Depth>(
205
+ this: ClassOf<V> & typeof CoValueBase,
206
+ existing: V,
207
+ depth: Depth & DepthsIn<V>,
208
+ listener: (value: DeeplyLoaded<V, Depth>) => void,
209
+ ): () => void;
210
+ static subscribe<V extends CoValue, Depth>(
211
+ this: ClassOf<V> & typeof CoValueBase,
212
+ ...args:
213
+ | [
214
+ ID<V>,
215
+ Account,
216
+ Depth & DepthsIn<V>,
217
+ (value: DeeplyLoaded<V, Depth>) => void,
218
+ ]
219
+ | [V, Depth & DepthsIn<V>, (value: DeeplyLoaded<V, Depth>) => void]
143
220
  ): () => void {
221
+ const { id, as, depth, listener } =
222
+ args.length === 4
223
+ ? {
224
+ id: args[0],
225
+ as: args[1],
226
+ depth: args[2],
227
+ listener: args[3],
228
+ }
229
+ : {
230
+ id: args[0].id,
231
+ as: args[0]._loadedAs,
232
+ depth: args[1],
233
+ listener: args[2],
234
+ };
144
235
  void Effect.runPromise(
145
236
  Effect.provideService(
146
- this.subscribeEf(id).pipe(
237
+ this.subscribeEf(id, depth).pipe(
147
238
  Stream.run(
148
239
  Sink.forEach((update) =>
149
- Effect.sync(() => onUpdate(update))
150
- )
151
- )
240
+ Effect.sync(() => listener(update)),
241
+ ),
242
+ ),
152
243
  ),
153
244
  AccountCtx,
154
- options.as as Account & Me
155
- )
245
+ as,
246
+ ),
156
247
  );
157
248
 
158
249
  return function unsubscribe() {};
159
250
  }
160
251
 
161
- static subscribeEf<V extends CoValue>(
162
- this: SubclassedConstructor<V> & typeof CoValueBase,
163
- id: ID<V>
164
- ): Stream.Stream<V, UnavailableError, AccountCtx> {
165
- return Stream.fromEffect(this.loadEf(id)).pipe(
166
- Stream.flatMap((value) =>
252
+ /** @category Subscription & Loading */
253
+ static subscribeEf<V extends CoValue, Depth>(
254
+ this: ClassOf<V> & typeof CoValueBase,
255
+ id: ID<V>,
256
+ depth: Depth & DepthsIn<V>,
257
+ ): Stream.Stream<DeeplyLoaded<V, Depth>, UnavailableError, AccountCtx> {
258
+ return AccountCtx.pipe(
259
+ Effect.andThen((account) =>
260
+ new Ref(id, account, {
261
+ ref: this as CoValueClass<V>,
262
+ optional: false,
263
+ }).loadEf(),
264
+ ),
265
+ Stream.fromEffect,
266
+ Stream.flatMap((value: V) =>
167
267
  Stream.asyncScoped<V, UnavailableError>((emit) =>
168
268
  Effect.gen(this, function* (_) {
169
269
  const subscription = new SubscriptionScope(
170
270
  value,
171
271
  this,
172
- (update) => {
173
- void emit.single(update as V);
174
- }
272
+ (update) => void emit.single(update as V),
175
273
  );
176
274
 
177
275
  yield* _(
178
276
  Effect.addFinalizer(() =>
179
- Effect.sync(() => subscription.unsubscribeAll())
180
- )
277
+ Effect.sync(() =>
278
+ subscription.unsubscribeAll(),
279
+ ),
280
+ ),
181
281
  );
182
- })
183
- )
184
- )
185
- );
186
- }
187
-
188
- subscribe(listener: (update: this) => void): () => void {
189
- return (this.constructor as unknown as typeof CoValueBase).subscribe(
190
- this.id as unknown as ID<CoValue>,
191
- { as: this._loadedAs },
192
- listener as unknown as (update: CoValue) => void
193
- );
194
- }
195
-
196
- subscribeEf(): Stream.Stream<this, UnavailableError, never> {
197
- return Stream.provideService(
198
- (this.constructor as unknown as typeof CoValueBase).subscribeEf(
199
- this.id as unknown as ID<CoValue>
282
+ }),
283
+ ),
284
+ ),
285
+ Stream.filterMap((update: V) =>
286
+ Option.fromNullable(
287
+ fulfillsDepth(depth, update)
288
+ ? (update as DeeplyLoaded<V, Depth>)
289
+ : undefined,
290
+ ),
200
291
  ),
201
- AccountCtx,
202
- this._loadedAs
203
- ) as unknown as Stream.Stream<this, UnavailableError, never>;
292
+ );
204
293
  }
205
294
 
295
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
206
296
  toJSON(): object | any[] {
207
297
  return {
208
298
  id: this.id,
@@ -214,4 +304,14 @@ export class CoValueBase implements CoValue {
214
304
  [inspect]() {
215
305
  return this.toJSON();
216
306
  }
307
+
308
+ /** @category Type Helpers*/
309
+ as<C extends CoValueClass>(otherSchema: C): InstanceType<C> {
310
+ const cast = otherSchema.fromRaw(this._raw) as InstanceType<C>;
311
+ const subScope = subscriptionsScopes.get(this);
312
+ if (subScope) {
313
+ subscriptionsScopes.set(cast, subScope);
314
+ }
315
+ return cast;
316
+ }
217
317
  }
@@ -0,0 +1,110 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { ItemsSym } from "./symbols.js";
3
+
4
+ (globalThis as any).devtoolsFormatters = [
5
+ {
6
+ header: (object: any) => {
7
+ if (object._type === "CoMap") {
8
+ return ["div", {}, ["span", {}, object.constructor.name]];
9
+ } else if (object._type === "CoList") {
10
+ return [
11
+ "div",
12
+ {},
13
+ [
14
+ "span",
15
+ {},
16
+ object.constructor.name + "(" + object.length + ") ",
17
+ ],
18
+ ];
19
+ } else if (object._type === "Account") {
20
+ return [
21
+ "div",
22
+ {},
23
+ [
24
+ "span",
25
+ {},
26
+ object.constructor.name +
27
+ "(" +
28
+ object._refs.profile.value?.name +
29
+ (object.isMe ? " ME" : "") +
30
+ ")",
31
+ ],
32
+ ];
33
+ } else {
34
+ return null;
35
+ }
36
+ },
37
+ hasBody: function () {
38
+ return true;
39
+ },
40
+ body: function (object: any) {
41
+ if (object._type === "CoMap" || object._type === "Account") {
42
+ return [
43
+ "div",
44
+ { style: "margin-left: 15px" },
45
+ ["div", "id: ", ["object", { object: object.id }]],
46
+ ...Object.entries(object).map(([k, v]) => [
47
+ "div",
48
+ { style: "white-space: nowrap;" },
49
+ [
50
+ "span",
51
+ { style: "font-weight: bold; opacity: 0.6" },
52
+ k,
53
+ ": ",
54
+ ],
55
+ ["object", { object: v }],
56
+ ...(typeof object._schema[k] === "function"
57
+ ? v === null
58
+ ? [
59
+ [
60
+ "span",
61
+ { style: "opacity: 0.5" },
62
+ ` (pending ${object._schema[k].name} `,
63
+ [
64
+ "object",
65
+ { object: object._refs[k] },
66
+ ],
67
+ ")",
68
+ ],
69
+ ]
70
+ : []
71
+ : []),
72
+ ]),
73
+ ];
74
+ } else if (object._type === "CoList") {
75
+ return [
76
+ "div",
77
+ { style: "margin-left: 15px" },
78
+ ["div", "id: ", ["object", { object: object.id }]],
79
+ ...(object as any[]).map((v, i) => [
80
+ "div",
81
+ { style: "white-space: nowrap;" },
82
+ [
83
+ "span",
84
+ { style: "font-weight: bold; opacity: 0.6" },
85
+ i,
86
+ ": ",
87
+ ],
88
+ ["object", { object: v }],
89
+ ...(typeof object._schema[ItemsSym] === "function"
90
+ ? v === null
91
+ ? [
92
+ [
93
+ "span",
94
+ { style: "opacity: 0.5" },
95
+ ` (pending ${object._schema[ItemsSym].name} `,
96
+ [
97
+ "object",
98
+ { object: object._refs[i] },
99
+ ],
100
+ ")",
101
+ ],
102
+ ]
103
+ : []
104
+ : []),
105
+ ]),
106
+ ];
107
+ }
108
+ },
109
+ },
110
+ ];
@@ -1,2 +1,2 @@
1
1
  export const inspect = Symbol.for("nodejs.util.inspect.custom");
2
- export type inspect = typeof inspect;
2
+ export type inspect = typeof inspect;