jazz-tools 0.17.4 → 0.17.5

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.
package/dist/index.js CHANGED
@@ -37,7 +37,7 @@ import {
37
37
  randomSessionProvider,
38
38
  subscribeToCoValue,
39
39
  zodReExport_exports
40
- } from "./chunk-NPXI4XAS.js";
40
+ } from "./chunk-EEKKLGF2.js";
41
41
 
42
42
  // src/tools/auth/clerk/index.ts
43
43
  import {
package/dist/testing.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  createAnonymousJazzContext,
7
7
  createJazzContext,
8
8
  randomSessionProvider
9
- } from "./chunk-NPXI4XAS.js";
9
+ } from "./chunk-EEKKLGF2.js";
10
10
 
11
11
  // src/tools/testing.ts
12
12
  import { LocalNode } from "cojson";
@@ -1,4 +1,4 @@
1
- import type { RawCoList } from "cojson";
1
+ import type { RawCoList, CoValueUniqueness } from "cojson";
2
2
  import type { Account, CoValue, CoValueClass, CoValueFromRaw, Group, ID, RefsToResolve, RefsToResolveStrict, Resolved, SchemaFor, SubscribeListenerOptions } from "../internal.js";
3
3
  import { AnonymousJazzAgent, ItemsSym, Ref, inspect } from "../internal.js";
4
4
  /**
@@ -118,6 +118,7 @@ export declare class CoList<out Item = any> extends Array<Item> implements CoVal
118
118
  **/
119
119
  static create<L extends CoList>(this: CoValueClass<L>, items: L[number][], options?: {
120
120
  owner: Account | Group;
121
+ unique?: CoValueUniqueness["uniqueness"];
121
122
  } | Account | Group): L;
122
123
  push(...items: Item[]): number;
123
124
  unshift(...items: Item[]): number;
@@ -228,6 +229,47 @@ export declare class CoList<out Item = any> extends Array<Item> implements CoVal
228
229
  }, listener: (value: Resolved<L, R>, unsubscribe: () => void) => void): () => void;
229
230
  /** @category Type Helpers */
230
231
  castAs<Cl extends CoValueClass & CoValueFromRaw<CoValue>>(cl: Cl): InstanceType<Cl>;
232
+ /** @deprecated Use `CoList.upsertUnique` and `CoList.loadUnique` instead. */
233
+ static findUnique<L extends CoList>(this: CoValueClass<L>, unique: CoValueUniqueness["uniqueness"], ownerID: ID<Account> | ID<Group>, as?: Account | Group | AnonymousJazzAgent): string;
234
+ /** @internal */
235
+ static _findUnique<L extends CoList>(this: CoValueClass<L>, unique: CoValueUniqueness["uniqueness"], ownerID: ID<Account> | ID<Group>, as?: Account | Group | AnonymousJazzAgent): ID<L>;
236
+ /**
237
+ * Given some data, updates an existing CoList or initialises a new one if none exists.
238
+ *
239
+ * Note: This method respects resolve options, and thus can return `null` if the references cannot be resolved.
240
+ *
241
+ * @example
242
+ * ```ts
243
+ * const activeItems = await ItemList.upsertUnique(
244
+ * {
245
+ * value: [item1, item2, item3],
246
+ * unique: sourceData.identifier,
247
+ * owner: workspace,
248
+ * }
249
+ * );
250
+ * ```
251
+ *
252
+ * @param options The options for creating or loading the CoList. This includes the intended state of the CoList, its unique identifier, its owner, and the references to resolve.
253
+ * @returns Either an existing & modified CoList, or a new initialised CoList if none exists.
254
+ * @category Subscription & Loading
255
+ */
256
+ static upsertUnique<L extends CoList, const R extends RefsToResolve<L> = true>(this: CoValueClass<L>, options: {
257
+ value: L[number][];
258
+ unique: CoValueUniqueness["uniqueness"];
259
+ owner: Account | Group;
260
+ resolve?: RefsToResolveStrict<L, R>;
261
+ }): Promise<Resolved<L, R> | null>;
262
+ /**
263
+ * Loads a CoList by its unique identifier and owner's ID.
264
+ * @param unique The unique identifier of the CoList to load.
265
+ * @param ownerID The ID of the owner of the CoList.
266
+ * @param options Additional options for loading the CoList.
267
+ * @returns The loaded CoList, or null if unavailable.
268
+ */
269
+ static loadUnique<L extends CoList, const R extends RefsToResolve<L> = true>(this: CoValueClass<L>, unique: CoValueUniqueness["uniqueness"], ownerID: ID<Account> | ID<Group>, options?: {
270
+ resolve?: RefsToResolveStrict<L, R>;
271
+ loadAs?: Account | AnonymousJazzAgent;
272
+ }): Promise<Resolved<L, R> | null>;
231
273
  /**
232
274
  * Wait for the `CoList` to be uploaded to the other peers.
233
275
  *
@@ -1 +1 @@
1
- {"version":3,"file":"coList.d.ts","sourceRoot":"","sources":["../../../src/tools/coValues/coList.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnD,OAAO,KAAK,EACV,OAAO,EACP,OAAO,EACP,YAAY,EACZ,cAAc,EACd,KAAK,EACL,EAAE,EAEF,aAAa,EACb,mBAAmB,EACnB,QAAQ,EAER,SAAS,EACT,wBAAwB,EAEzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,GAAG,EAQH,OAAO,EASR,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;GAgBG;AAEH,qBAAa,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAE,SAAQ,KAAK,CAAC,IAAI,CAAE,YAAW,OAAO;IACxE;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,CAAC;IAOhD;;wDAEoD;IACpD,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK;IAIjC;;2BAEuB;IACf,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,6BAA6B;IACrB,KAAK,EAAE,QAAQ,CAAC;IAIxB,0BAA0B;IAClB,IAAI,EAAE,SAAS,CAAC;IACxB,0BAA0B;IAClB,WAAW,EAAE,MAAM,CAAC;IAE5B,wEAAwE;IACxE,CAAC,QAAQ,CAAC,EAAG,IAAI,CAAC;IAClB,gBAAgB;IAEhB,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC;IACpB,gBAAgB;IAChB,IAAI,OAAO,IAAI;QACb,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;KACnC,CAEA;IAED,8BAA8B;IAC9B,IAAI,MAAM,IAAI,OAAO,GAAG,KAAK,CAM5B;IAED;;;;;;;;;;;;;;;QAeI;IACJ,IAAI,KAAK,IAAI;QACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,OAAO,GAC9C,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GACxB,KAAK,CAAC;KACX,GAAG;QACF,MAAM,EAAE,MAAM,CAAC;QACf,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CACnC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CACvE,CAAC;KACH,CASA;IAED,IAAI,MAAM,IAAI;QACZ,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,KAAK,CAAC,EAAE,IAAI,CAAC;YACb,GAAG,CAAC,EAAE,IAAI,SAAS,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YAC/C,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;YACnB,MAAM,EAAE,IAAI,CAAC;SACd,CAAC;KACH,CAEA;IAED,IAAI,SAAS,iCAYZ;IAED,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,qBAE1B;IAED,kBAAkB;gBAIN,OAAO,EAAE;QAAE,OAAO,EAAE,SAAS,CAAA;KAAE,GAAG,SAAS;IAqBvD;;;;;;;;;;;;;;;;;;;;QAoBI;IACJ,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,EAC5B,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EACrB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAClB,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAAA;KAAE,GAAG,OAAO,GAAG,KAAK;IAmBxD,IAAI,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM;IAU9B,OAAO,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM;IAYjC,GAAG,IAAI,IAAI,GAAG,SAAS;IAQvB,KAAK,IAAI,IAAI,GAAG,SAAS;IAQzB;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE;IAsDpE;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE;IAiBxB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,EAAE;IAoBvD,CAAC,OAAO,CAAC;IAIT,0BAA0B;IAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,MAAM,EAC7B,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,MAAM,EACrC,GAAG,EAAE,SAAS;IAKhB,gBAAgB;IAChB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,EAE5B,IAAI,EAAE;QAAE,KAAK,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,CAAA;KAAE,GAAG,OAAO,MAAM,EAC/C,GAAG,EAAE;QAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAA;KAAE;IAM7C;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,EACnE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EACrB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EACT,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,OAAO,GAAG,kBAAkB,CAAC;KACvC,GACA,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAIjC;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,EACxE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EACrB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EACT,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GACjE,MAAM,IAAI;IACb,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,EACxE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EACrB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EACT,OAAO,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,EACvC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GACjE,MAAM,IAAI;IAUb;;;;;;OAMG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,EAC7D,IAAI,EAAE,CAAC,EACP,OAAO,EAAE;QAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KAAE,GAC9C,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAI1B;;;;;;;;QAQI;IACJ,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,EACjE,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GACjE,MAAM,IAAI;IACb,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,EACjE,IAAI,EAAE,CAAC,EACP,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KAAE,EAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GACjE,MAAM,IAAI;IASb,6BAA6B;IAC7B,MAAM,CAAC,EAAE,SAAS,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,EACtD,EAAE,EAAE,EAAE,GACL,YAAY,CAAC,EAAE,CAAC;IAInB;;;;OAIG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;CAG3C"}
1
+ {"version":3,"file":"coList.d.ts","sourceRoot":"","sources":["../../../src/tools/coValues/coList.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import { Account, CoList, Group, RefsToResolve, RefsToResolveStrict, Resolved, SubscribeListenerOptions } from "../../../internal.js";
1
+ import { Account, CoList, Group, ID, RefsToResolve, RefsToResolveStrict, Resolved, SubscribeListenerOptions } from "../../../internal.js";
2
+ import { CoValueUniqueness } from "cojson";
2
3
  import { AnonymousJazzAgent } from "../../anonymousJazzAgent.js";
3
4
  import { CoListInit } from "../typeConverters/CoFieldInit.js";
4
5
  import { InstanceOrPrimitiveOfSchema } from "../typeConverters/InstanceOrPrimitiveOfSchema.js";
@@ -14,6 +15,7 @@ export declare class CoListSchema<T extends AnyZodOrCoValueSchema> implements Co
14
15
  constructor(element: T, coValueClass: typeof CoList);
15
16
  create(items: CoListInit<T>, options?: {
16
17
  owner: Account | Group;
18
+ unique?: CoValueUniqueness["uniqueness"];
17
19
  } | Account | Group): CoListInstance<T>;
18
20
  load<const R extends RefsToResolve<CoListInstanceCoValuesNullable<T>> = true>(id: string, options?: {
19
21
  resolve?: RefsToResolveStrict<CoListInstanceCoValuesNullable<T>, R>;
@@ -21,6 +23,18 @@ export declare class CoListSchema<T extends AnyZodOrCoValueSchema> implements Co
21
23
  }): Promise<Resolved<CoListInstanceCoValuesNullable<T>, R> | null>;
22
24
  subscribe<const R extends RefsToResolve<CoListInstanceCoValuesNullable<T>> = true>(id: string, options: SubscribeListenerOptions<CoListInstanceCoValuesNullable<T>, R>, listener: (value: Resolved<CoListInstanceCoValuesNullable<T>, R>, unsubscribe: () => void) => void): () => void;
23
25
  getCoValueClass(): typeof CoList;
26
+ /** @deprecated Use `CoList.upsertUnique` and `CoList.loadUnique` instead. */
27
+ findUnique(unique: CoValueUniqueness["uniqueness"], ownerID: ID<Account> | ID<Group>, as?: Account | Group | AnonymousJazzAgent): ID<CoListInstanceCoValuesNullable<T>>;
28
+ upsertUnique<const R extends RefsToResolve<CoListInstanceCoValuesNullable<T>> = true>(options: {
29
+ value: CoListInit<T>;
30
+ unique: CoValueUniqueness["uniqueness"];
31
+ owner: Account | Group;
32
+ resolve?: RefsToResolveStrict<CoListInstanceCoValuesNullable<T>, R>;
33
+ }): Promise<Resolved<CoListInstanceCoValuesNullable<T>, R> | null>;
34
+ loadUnique<const R extends RefsToResolve<CoListInstanceCoValuesNullable<T>> = true>(unique: CoValueUniqueness["uniqueness"], ownerID: ID<Account> | ID<Group>, options?: {
35
+ resolve?: RefsToResolveStrict<CoListInstanceCoValuesNullable<T>, R>;
36
+ loadAs?: Account | AnonymousJazzAgent;
37
+ }): Promise<Resolved<CoListInstanceCoValuesNullable<T>, R> | null>;
24
38
  optional(): CoOptionalSchema<this>;
25
39
  }
26
40
  export declare function createCoreCoListSchema<T extends AnyZodOrCoValueSchema>(element: T): CoreCoListSchema<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"CoListSchema.d.ts","sourceRoot":"","sources":["../../../../../src/tools/implementation/zodSchema/schemaTypes/CoListSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,aAAa,EACb,mBAAmB,EACnB,QAAQ,EACR,wBAAwB,EAEzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AAC/F,OAAO,EAAE,2CAA2C,EAAE,MAAM,kEAAkE,CAAC;AAC/H,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,qBAAa,YAAY,CAAC,CAAC,SAAS,qBAAqB,CACvD,YAAW,gBAAgB,CAAC,CAAC,CAAC;IAMrB,OAAO,EAAE,CAAC;IACjB,OAAO,CAAC,YAAY;IALtB,aAAa,OAAiB;IAC9B,OAAO,WAAqB;gBAGnB,OAAO,EAAE,CAAC,EACT,YAAY,EAAE,OAAO,MAAM;IAGrC,MAAM,CACJ,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAAA;KAAE,GAAG,OAAO,GAAG,KAAK,GACrD,cAAc,CAAC,CAAC,CAAC;IAIpB,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,aAAa,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAC1E,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,mBAAmB,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,EAAE,OAAO,GAAG,kBAAkB,CAAC;KACvC,GACA,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAKjE,SAAS,CACP,KAAK,CAAC,CAAC,SAAS,aAAa,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAEvE,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,wBAAwB,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EACvE,QAAQ,EAAE,CACR,KAAK,EAAE,QAAQ,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,WAAW,EAAE,MAAM,IAAI,KACpB,IAAI,GACR,MAAM,IAAI;IAIb,eAAe,IAAI,OAAO,MAAM;IAIhC,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC;CAGnC;AAED,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,qBAAqB,EACpE,OAAO,EAAE,CAAC,GACT,gBAAgB,CAAC,CAAC,CAAC,CAMrB;AAGD,MAAM,WAAW,gBAAgB,CAC/B,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,CACvD,SAAQ,iBAAiB;IACzB,OAAO,EAAE,QAAQ,CAAC;IAClB,OAAO,EAAE,CAAC,CAAC;CACZ;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,qBAAqB,IAAI,MAAM,CAClE,2BAA2B,CAAC,CAAC,CAAC,CAC/B,CAAC;AAEF,MAAM,MAAM,8BAA8B,CAAC,CAAC,SAAS,qBAAqB,IACxE,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"CoListSchema.d.ts","sourceRoot":"","sources":["../../../../../src/tools/implementation/zodSchema/schemaTypes/CoListSchema.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,18 @@ export interface CoRecordSchema<K extends z.core.$ZodString<string>, V extends A
23
23
  loadAs?: Account | AnonymousJazzAgent;
24
24
  }): Promise<Resolved<CoRecordInstanceCoValuesNullable<K, V>, R> | null>;
25
25
  subscribe<const R extends RefsToResolve<CoRecordInstanceCoValuesNullable<K, V>> = true>(id: ID<CoRecordInstanceCoValuesNullable<K, V>>, options: SubscribeListenerOptions<CoRecordInstanceCoValuesNullable<K, V>, R>, listener: (value: Resolved<CoRecordInstanceCoValuesNullable<K, V>, R>, unsubscribe: () => void) => void): () => void;
26
+ /** @deprecated Use `CoMap.upsertUnique` and `CoMap.loadUnique` instead. */
26
27
  findUnique(unique: CoValueUniqueness["uniqueness"], ownerID: ID<Account> | ID<Group>, as?: Account | Group | AnonymousJazzAgent): ID<CoRecordInstanceCoValuesNullable<K, V>>;
28
+ upsertUnique<const R extends RefsToResolve<CoRecordInstanceCoValuesNullable<K, V>> = true>(options: {
29
+ value: Simplify<CoRecordInit<K, V>>;
30
+ unique: CoValueUniqueness["uniqueness"];
31
+ owner: Account | Group;
32
+ resolve?: RefsToResolveStrict<CoRecordInstanceCoValuesNullable<K, V>, R>;
33
+ }): Promise<Resolved<CoRecordInstanceCoValuesNullable<K, V>, R> | null>;
34
+ loadUnique<const R extends RefsToResolve<CoRecordInstanceCoValuesNullable<K, V>> = true>(unique: CoValueUniqueness["uniqueness"], ownerID: ID<Account> | ID<Group>, options?: {
35
+ resolve?: RefsToResolveStrict<CoRecordInstanceCoValuesNullable<K, V>, R>;
36
+ loadAs?: Account | AnonymousJazzAgent;
37
+ }): Promise<Resolved<CoRecordInstanceCoValuesNullable<K, V>, R> | null>;
27
38
  getCoValueClass: () => typeof CoMap;
28
39
  optional(): CoOptionalSchema<this>;
29
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CoRecordSchema.d.ts","sourceRoot":"","sources":["../../../../../src/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CoRecordSchema.d.ts","sourceRoot":"","sources":["../../../../../src/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -140,7 +140,7 @@
140
140
  },
141
141
  "type": "module",
142
142
  "license": "MIT",
143
- "version": "0.17.4",
143
+ "version": "0.17.5",
144
144
  "dependencies": {
145
145
  "@manuscripts/prosemirror-recreate-steps": "^0.1.4",
146
146
  "@scure/base": "1.2.1",
@@ -156,9 +156,9 @@
156
156
  "prosemirror-state": "^1.4.3",
157
157
  "prosemirror-transform": "^1.9.0",
158
158
  "zod": "3.25.76",
159
- "cojson": "0.17.4",
160
- "cojson-storage-indexeddb": "0.17.4",
161
- "cojson-transport-ws": "0.17.4"
159
+ "cojson": "0.17.5",
160
+ "cojson-storage-indexeddb": "0.17.5",
161
+ "cojson-transport-ws": "0.17.5"
162
162
  },
163
163
  "devDependencies": {
164
164
  "@scure/bip39": "^1.3.0",
@@ -1,5 +1,5 @@
1
- import type { JsonValue, RawCoList } from "cojson";
2
- import { ControlledAccount, RawAccount } from "cojson";
1
+ import type { JsonValue, RawCoList, CoValueUniqueness, RawCoID } from "cojson";
2
+ import { ControlledAccount, RawAccount, cojsonInternals } from "cojson";
3
3
  import { calcPatch } from "fast-myers-diff";
4
4
  import type {
5
5
  Account,
@@ -24,6 +24,7 @@ import {
24
24
  RegisteredSchemas,
25
25
  SchemaInit,
26
26
  accessChildByKey,
27
+ activeAccountContext,
27
28
  coField,
28
29
  coValueClassFromCoValueClassOrSchema,
29
30
  coValuesCache,
@@ -236,12 +237,21 @@ export class CoList<out Item = any> extends Array<Item> implements CoValue {
236
237
  static create<L extends CoList>(
237
238
  this: CoValueClass<L>,
238
239
  items: L[number][],
239
- options?: { owner: Account | Group } | Account | Group,
240
+ options?:
241
+ | {
242
+ owner: Account | Group;
243
+ unique?: CoValueUniqueness["uniqueness"];
244
+ }
245
+ | Account
246
+ | Group,
240
247
  ) {
241
- const { owner } = parseCoValueCreateOptions(options);
248
+ const { owner, uniqueness } = parseCoValueCreateOptions(options);
242
249
  const instance = new this({ init: items, owner });
243
250
  const raw = owner._raw.createList(
244
251
  toRawItems(items, instance._schema[ItemsSym], owner),
252
+ null,
253
+ "private",
254
+ uniqueness,
245
255
  );
246
256
 
247
257
  Object.defineProperties(instance, {
@@ -546,6 +556,116 @@ export class CoList<out Item = any> extends Array<Item> implements CoValue {
546
556
  return cl.fromRaw(this._raw) as InstanceType<Cl>;
547
557
  }
548
558
 
559
+ /** @deprecated Use `CoList.upsertUnique` and `CoList.loadUnique` instead. */
560
+ static findUnique<L extends CoList>(
561
+ this: CoValueClass<L>,
562
+ unique: CoValueUniqueness["uniqueness"],
563
+ ownerID: ID<Account> | ID<Group>,
564
+ as?: Account | Group | AnonymousJazzAgent,
565
+ ) {
566
+ return CoList._findUnique(unique, ownerID, as);
567
+ }
568
+
569
+ /** @internal */
570
+ static _findUnique<L extends CoList>(
571
+ this: CoValueClass<L>,
572
+ unique: CoValueUniqueness["uniqueness"],
573
+ ownerID: ID<Account> | ID<Group>,
574
+ as?: Account | Group | AnonymousJazzAgent,
575
+ ) {
576
+ as ||= activeAccountContext.get();
577
+
578
+ const header = {
579
+ type: "colist" as const,
580
+ ruleset: {
581
+ type: "ownedByGroup" as const,
582
+ group: ownerID as RawCoID,
583
+ },
584
+ meta: null,
585
+ uniqueness: unique,
586
+ };
587
+ const crypto =
588
+ as._type === "Anonymous" ? as.node.crypto : as._raw.core.node.crypto;
589
+ return cojsonInternals.idforHeader(header, crypto) as ID<L>;
590
+ }
591
+
592
+ /**
593
+ * Given some data, updates an existing CoList or initialises a new one if none exists.
594
+ *
595
+ * Note: This method respects resolve options, and thus can return `null` if the references cannot be resolved.
596
+ *
597
+ * @example
598
+ * ```ts
599
+ * const activeItems = await ItemList.upsertUnique(
600
+ * {
601
+ * value: [item1, item2, item3],
602
+ * unique: sourceData.identifier,
603
+ * owner: workspace,
604
+ * }
605
+ * );
606
+ * ```
607
+ *
608
+ * @param options The options for creating or loading the CoList. This includes the intended state of the CoList, its unique identifier, its owner, and the references to resolve.
609
+ * @returns Either an existing & modified CoList, or a new initialised CoList if none exists.
610
+ * @category Subscription & Loading
611
+ */
612
+ static async upsertUnique<
613
+ L extends CoList,
614
+ const R extends RefsToResolve<L> = true,
615
+ >(
616
+ this: CoValueClass<L>,
617
+ options: {
618
+ value: L[number][];
619
+ unique: CoValueUniqueness["uniqueness"];
620
+ owner: Account | Group;
621
+ resolve?: RefsToResolveStrict<L, R>;
622
+ },
623
+ ): Promise<Resolved<L, R> | null> {
624
+ let listId = CoList._findUnique(options.unique, options.owner.id);
625
+ let list: Resolved<L, R> | null = await loadCoValueWithoutMe(this, listId, {
626
+ ...options,
627
+ loadAs: options.owner._loadedAs,
628
+ skipRetry: true,
629
+ });
630
+ if (!list) {
631
+ list = (this as any).create(options.value, {
632
+ owner: options.owner,
633
+ unique: options.unique,
634
+ }) as Resolved<L, R>;
635
+ } else {
636
+ (list as L).applyDiff(options.value);
637
+ }
638
+
639
+ return await loadCoValueWithoutMe(this, listId, {
640
+ ...options,
641
+ loadAs: options.owner._loadedAs,
642
+ skipRetry: true,
643
+ });
644
+ }
645
+
646
+ /**
647
+ * Loads a CoList by its unique identifier and owner's ID.
648
+ * @param unique The unique identifier of the CoList to load.
649
+ * @param ownerID The ID of the owner of the CoList.
650
+ * @param options Additional options for loading the CoList.
651
+ * @returns The loaded CoList, or null if unavailable.
652
+ */
653
+ static loadUnique<L extends CoList, const R extends RefsToResolve<L> = true>(
654
+ this: CoValueClass<L>,
655
+ unique: CoValueUniqueness["uniqueness"],
656
+ ownerID: ID<Account> | ID<Group>,
657
+ options?: {
658
+ resolve?: RefsToResolveStrict<L, R>;
659
+ loadAs?: Account | AnonymousJazzAgent;
660
+ },
661
+ ): Promise<Resolved<L, R> | null> {
662
+ return loadCoValueWithoutMe(
663
+ this,
664
+ CoList._findUnique(unique, ownerID, options?.loadAs),
665
+ { ...options, skipRetry: true },
666
+ );
667
+ }
668
+
549
669
  /**
550
670
  * Wait for the `CoList` to be uploaded to the other peers.
551
671
  *
@@ -2,12 +2,14 @@ import {
2
2
  Account,
3
3
  CoList,
4
4
  Group,
5
+ ID,
5
6
  RefsToResolve,
6
7
  RefsToResolveStrict,
7
8
  Resolved,
8
9
  SubscribeListenerOptions,
9
10
  coOptionalDefiner,
10
11
  } from "../../../internal.js";
12
+ import { CoValueUniqueness } from "cojson";
11
13
  import { AnonymousJazzAgent } from "../../anonymousJazzAgent.js";
12
14
  import { CoListInit } from "../typeConverters/CoFieldInit.js";
13
15
  import { InstanceOrPrimitiveOfSchema } from "../typeConverters/InstanceOrPrimitiveOfSchema.js";
@@ -29,7 +31,13 @@ export class CoListSchema<T extends AnyZodOrCoValueSchema>
29
31
 
30
32
  create(
31
33
  items: CoListInit<T>,
32
- options?: { owner: Account | Group } | Account | Group,
34
+ options?:
35
+ | {
36
+ owner: Account | Group;
37
+ unique?: CoValueUniqueness["uniqueness"];
38
+ }
39
+ | Account
40
+ | Group,
33
41
  ): CoListInstance<T> {
34
42
  return this.coValueClass.create(items as any, options) as CoListInstance<T>;
35
43
  }
@@ -62,6 +70,41 @@ export class CoListSchema<T extends AnyZodOrCoValueSchema>
62
70
  return this.coValueClass;
63
71
  }
64
72
 
73
+ /** @deprecated Use `CoList.upsertUnique` and `CoList.loadUnique` instead. */
74
+ findUnique(
75
+ unique: CoValueUniqueness["uniqueness"],
76
+ ownerID: ID<Account> | ID<Group>,
77
+ as?: Account | Group | AnonymousJazzAgent,
78
+ ): ID<CoListInstanceCoValuesNullable<T>> {
79
+ return this.coValueClass.findUnique(unique, ownerID, as);
80
+ }
81
+
82
+ upsertUnique<
83
+ const R extends RefsToResolve<CoListInstanceCoValuesNullable<T>> = true,
84
+ >(options: {
85
+ value: CoListInit<T>;
86
+ unique: CoValueUniqueness["uniqueness"];
87
+ owner: Account | Group;
88
+ resolve?: RefsToResolveStrict<CoListInstanceCoValuesNullable<T>, R>;
89
+ }): Promise<Resolved<CoListInstanceCoValuesNullable<T>, R> | null> {
90
+ // @ts-expect-error
91
+ return this.coValueClass.upsertUnique(options);
92
+ }
93
+
94
+ loadUnique<
95
+ const R extends RefsToResolve<CoListInstanceCoValuesNullable<T>> = true,
96
+ >(
97
+ unique: CoValueUniqueness["uniqueness"],
98
+ ownerID: ID<Account> | ID<Group>,
99
+ options?: {
100
+ resolve?: RefsToResolveStrict<CoListInstanceCoValuesNullable<T>, R>;
101
+ loadAs?: Account | AnonymousJazzAgent;
102
+ },
103
+ ): Promise<Resolved<CoListInstanceCoValuesNullable<T>, R> | null> {
104
+ // @ts-expect-error
105
+ return this.coValueClass.loadUnique(unique, ownerID, options);
106
+ }
107
+
65
108
  optional(): CoOptionalSchema<this> {
66
109
  return coOptionalDefiner(this);
67
110
  }
@@ -72,12 +72,37 @@ export interface CoRecordSchema<
72
72
  ) => void,
73
73
  ): () => void;
74
74
 
75
+ /** @deprecated Use `CoMap.upsertUnique` and `CoMap.loadUnique` instead. */
75
76
  findUnique(
76
77
  unique: CoValueUniqueness["uniqueness"],
77
78
  ownerID: ID<Account> | ID<Group>,
78
79
  as?: Account | Group | AnonymousJazzAgent,
79
80
  ): ID<CoRecordInstanceCoValuesNullable<K, V>>;
80
81
 
82
+ upsertUnique<
83
+ const R extends RefsToResolve<
84
+ CoRecordInstanceCoValuesNullable<K, V>
85
+ > = true,
86
+ >(options: {
87
+ value: Simplify<CoRecordInit<K, V>>;
88
+ unique: CoValueUniqueness["uniqueness"];
89
+ owner: Account | Group;
90
+ resolve?: RefsToResolveStrict<CoRecordInstanceCoValuesNullable<K, V>, R>;
91
+ }): Promise<Resolved<CoRecordInstanceCoValuesNullable<K, V>, R> | null>;
92
+
93
+ loadUnique<
94
+ const R extends RefsToResolve<
95
+ CoRecordInstanceCoValuesNullable<K, V>
96
+ > = true,
97
+ >(
98
+ unique: CoValueUniqueness["uniqueness"],
99
+ ownerID: ID<Account> | ID<Group>,
100
+ options?: {
101
+ resolve?: RefsToResolveStrict<CoRecordInstanceCoValuesNullable<K, V>, R>;
102
+ loadAs?: Account | AnonymousJazzAgent;
103
+ },
104
+ ): Promise<Resolved<CoRecordInstanceCoValuesNullable<K, V>, R> | null>;
105
+
81
106
  getCoValueClass: () => typeof CoMap;
82
107
 
83
108
  optional(): CoOptionalSchema<this>;
@@ -863,6 +863,173 @@ describe("CoList subscription", async () => {
863
863
  });
864
864
  });
865
865
 
866
+ describe("CoList unique methods", () => {
867
+ test("loadUnique returns existing list", async () => {
868
+ const ItemList = co.list(z.string());
869
+ const group = Group.create();
870
+
871
+ const originalList = ItemList.create(["item1", "item2", "item3"], {
872
+ owner: group,
873
+ unique: "test-list",
874
+ });
875
+
876
+ const foundList = await ItemList.loadUnique("test-list", group.id);
877
+ expect(foundList).toEqual(originalList);
878
+ expect(foundList?.length).toBe(3);
879
+ expect(foundList?.[0]).toBe("item1");
880
+ });
881
+
882
+ test("loadUnique returns null for non-existent list", async () => {
883
+ const ItemList = co.list(z.string());
884
+ const group = Group.create();
885
+
886
+ const foundList = await ItemList.loadUnique("non-existent", group.id);
887
+ expect(foundList).toBeNull();
888
+ });
889
+
890
+ test("upsertUnique creates new list when none exists", async () => {
891
+ const ItemList = co.list(z.string());
892
+ const group = Group.create();
893
+
894
+ const sourceData = ["item1", "item2", "item3"];
895
+
896
+ const result = await ItemList.upsertUnique({
897
+ value: sourceData,
898
+ unique: "new-list",
899
+ owner: group,
900
+ });
901
+
902
+ expect(result).not.toBeNull();
903
+ expect(result?.length).toBe(3);
904
+ expect(result?.[0]).toBe("item1");
905
+ expect(result?.[1]).toBe("item2");
906
+ expect(result?.[2]).toBe("item3");
907
+ });
908
+
909
+ test("upsertUnique updates existing list", async () => {
910
+ const ItemList = co.list(z.string());
911
+ const group = Group.create();
912
+
913
+ // Create initial list
914
+ const originalList = ItemList.create(["original1", "original2"], {
915
+ owner: group,
916
+ unique: "update-list",
917
+ });
918
+
919
+ // Upsert with new data
920
+ const updatedList = await ItemList.upsertUnique({
921
+ value: ["updated1", "updated2", "updated3"],
922
+ unique: "update-list",
923
+ owner: group,
924
+ });
925
+
926
+ expect(updatedList).toEqual(originalList); // Should be the same instance
927
+ expect(updatedList?.length).toBe(3);
928
+ expect(updatedList?.[0]).toBe("updated1");
929
+ expect(updatedList?.[1]).toBe("updated2");
930
+ expect(updatedList?.[2]).toBe("updated3");
931
+ });
932
+
933
+ test("upsertUnique with CoValue items", async () => {
934
+ const Item = co.map({
935
+ name: z.string(),
936
+ value: z.number(),
937
+ });
938
+ const ItemList = co.list(Item);
939
+ const group = Group.create();
940
+
941
+ const items = [
942
+ Item.create({ name: "First", value: 1 }, group),
943
+ Item.create({ name: "Second", value: 2 }, group),
944
+ ];
945
+
946
+ const result = await ItemList.upsertUnique({
947
+ value: items,
948
+ unique: "item-list",
949
+ owner: group,
950
+ resolve: { $each: true },
951
+ });
952
+
953
+ expect(result).not.toBeNull();
954
+ expect(result?.length).toBe(2);
955
+ expect(result?.[0]?.name).toBe("First");
956
+ expect(result?.[1]?.name).toBe("Second");
957
+ });
958
+
959
+ test("upsertUnique updates list with CoValue items", async () => {
960
+ const Item = co.map({
961
+ name: z.string(),
962
+ value: z.number(),
963
+ });
964
+ const ItemList = co.list(Item);
965
+ const group = Group.create();
966
+
967
+ // Create initial list
968
+ const initialItems = [Item.create({ name: "Initial", value: 0 }, group)];
969
+ const originalList = ItemList.create(initialItems, {
970
+ owner: group,
971
+ unique: "updateable-item-list",
972
+ });
973
+
974
+ // Upsert with new items
975
+ const newItems = [
976
+ Item.create({ name: "Updated", value: 1 }, group),
977
+ Item.create({ name: "Added", value: 2 }, group),
978
+ ];
979
+
980
+ const updatedList = await ItemList.upsertUnique({
981
+ value: newItems,
982
+ unique: "updateable-item-list",
983
+ owner: group,
984
+ resolve: { $each: true },
985
+ });
986
+
987
+ expect(updatedList).toEqual(originalList); // Should be the same instance
988
+ expect(updatedList?.length).toBe(2);
989
+ expect(updatedList?.[0]?.name).toBe("Updated");
990
+ expect(updatedList?.[1]?.name).toBe("Added");
991
+ });
992
+
993
+ test("findUnique returns correct ID", async () => {
994
+ const ItemList = co.list(z.string());
995
+ const group = Group.create();
996
+
997
+ const originalList = ItemList.create(["test"], {
998
+ owner: group,
999
+ unique: "find-test",
1000
+ });
1001
+
1002
+ const foundId = ItemList.findUnique("find-test", group.id);
1003
+ expect(foundId).toBe(originalList.id);
1004
+ });
1005
+
1006
+ test("upsertUnique with resolve options", async () => {
1007
+ const Category = co.map({ title: z.string() });
1008
+ const Item = co.map({
1009
+ name: z.string(),
1010
+ category: Category,
1011
+ });
1012
+ const ItemList = co.list(Item);
1013
+ const group = Group.create();
1014
+
1015
+ const category = Category.create({ title: "Category 1" }, group);
1016
+
1017
+ const items = [Item.create({ name: "Item 1", category }, group)];
1018
+
1019
+ const result = await ItemList.upsertUnique({
1020
+ value: items,
1021
+ unique: "resolved-list",
1022
+ owner: group,
1023
+ resolve: { $each: { category: true } },
1024
+ });
1025
+
1026
+ expect(result).not.toBeNull();
1027
+ expect(result?.length).toBe(1);
1028
+ expect(result?.[0]?.name).toBe("Item 1");
1029
+ expect(result?.[0]?.category?.title).toBe("Category 1");
1030
+ });
1031
+ });
1032
+
866
1033
  describe("co.list schema", () => {
867
1034
  test("can access the inner schema of a co.list", () => {
868
1035
  const Keywords = co.list(co.plainText());