convex-helpers 0.1.83 → 0.1.84

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/index.d.ts CHANGED
@@ -57,7 +57,19 @@ export declare function pick<T extends Record<string, any>, Keys extends (keyof
57
57
  * @param keys The keys to omit from the object.
58
58
  * @returns A new object with the keys you omitted removed.
59
59
  */
60
- export declare function omit<T extends Record<string, any>, Keys extends (keyof T)[]>(obj: T, keys: Keys): BetterOmit<T, Keys[number]>;
60
+ export declare function omit<T extends Record<string, any>, Keys extends (keyof T)[]>(obj: T, keys: Keys): Expand<BetterOmit<T, Keys[number]>>;
61
+ /**
62
+ * Removes the _id and _creationTime fields from an object.
63
+ * This enables easily cloning a Convex document like:
64
+ * ```ts
65
+ * const doc = await db.get(id);
66
+ * const clone = withoutSystemFields(doc);
67
+ * await db.insert(table, clone);
68
+ * ```
69
+ * @param obj The object to remove the _id and _creationTime fields from.
70
+ * @returns A new object with the _id and _creationTime fields removed.
71
+ */
72
+ export declare function withoutSystemFields<T extends Record<string, any>>(obj: T): Expand<BetterOmit<T, "_id" | "_creationTime">>;
61
73
  declare const error: unique symbol;
62
74
  export type ErrorMessage<Reason extends string> = Reason & {
63
75
  __error: typeof error;
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAC7C,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EACtD,cAAc,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GACjE,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAEpD;AAED,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAE/C;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAKhE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAC1E,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,IAAI,GAIL,GACF,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAC1B,CACF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAC1E,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,IAAI,GAIL,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CACjC;AAGD,QAAA,MAAM,KAAK,eAAW,CAAC;AACvB,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,MAAM,IAAI,MAAM,GAAG;IACzD,OAAO,EAAE,OAAO,KAAK,CAAC;CACvB,CAAC;AAGF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAChD;;;;GAIG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI;KAC5C,QAAQ,IAAI,MAAM,CAAC,IAAI,QAAQ,SAAS,CAAC,GAAG,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;CAC5E,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,MAAM,CAAC,UAAU,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IACpD,UAAU,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAC/B;KACG,GAAG,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC;CAC3C,GACD,KAAK,CAAC;AAEZ;;GAEG;AACH;;;;GAIG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,IACrB,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAC/D,IAAI,GACJ,KAAK,CAAC;AAEZ;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAItE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAC7C,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EACtD,cAAc,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GACjE,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAEpD;AAED,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAE/C;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAKhE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAC1E,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,IAAI,GAIL,GACF,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAC1B,CACF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,EAC1E,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,IAAI,GAIL,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CACzC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,kDAExE;AAGD,QAAA,MAAM,KAAK,eAAW,CAAC;AACvB,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,MAAM,IAAI,MAAM,GAAG;IACzD,OAAO,EAAE,OAAO,KAAK,CAAC;CACvB,CAAC;AAGF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAChD;;;;GAIG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI;KAC5C,QAAQ,IAAI,MAAM,CAAC,IAAI,QAAQ,SAAS,CAAC,GAAG,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;CAC5E,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,MAAM,CAAC,UAAU,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IACpD,UAAU,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAC/B;KACG,GAAG,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC;CAC3C,GACD,KAAK,CAAC;AAEZ;;GAEG;AACH;;;;GAIG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,IACrB,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAC/D,IAAI,GACJ,KAAK,CAAC;AAEZ;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAItE"}
package/index.js CHANGED
@@ -78,6 +78,20 @@ export function pick(obj, keys) {
78
78
  export function omit(obj, keys) {
79
79
  return Object.fromEntries(Object.entries(obj).filter(([k]) => !keys.includes(k)));
80
80
  }
81
+ /**
82
+ * Removes the _id and _creationTime fields from an object.
83
+ * This enables easily cloning a Convex document like:
84
+ * ```ts
85
+ * const doc = await db.get(id);
86
+ * const clone = withoutSystemFields(doc);
87
+ * await db.insert(table, clone);
88
+ * ```
89
+ * @param obj The object to remove the _id and _creationTime fields from.
90
+ * @returns A new object with the _id and _creationTime fields removed.
91
+ */
92
+ export function withoutSystemFields(obj) {
93
+ return omit(obj, ["_id", "_creationTime"]);
94
+ }
81
95
  // Type utils:
82
96
  const error = Symbol();
83
97
  /**
package/index.test.ts ADDED
@@ -0,0 +1,29 @@
1
+ import { withoutSystemFields } from "./index.js";
2
+ import { test, expect, expectTypeOf } from "vitest";
3
+
4
+ test("withoutSystemFields", () => {
5
+ const obj = { _id: "1", _creationTime: 1, a: "a" };
6
+ const without = withoutSystemFields(obj);
7
+ expect(without).toEqual({ a: "a" });
8
+ });
9
+
10
+ test("withoutSystemFields when fields aren't present", () => {
11
+ const obj = { a: "a" };
12
+ const without = withoutSystemFields(obj);
13
+ expect(without).toEqual({ a: "a" });
14
+ });
15
+
16
+ test("withoutSystemFields type when it's a union", () => {
17
+ const obj = { a: "a" } as
18
+ | { a: string }
19
+ | { _id: string; _creationTime: number };
20
+ const without = withoutSystemFields(obj);
21
+ expect(without).toEqual({ a: "a" });
22
+ expectTypeOf(without).toEqualTypeOf<{ a: string } | {}>();
23
+ const obj2 = { _id: "1", _creationTime: 1, a: "a" } as
24
+ | { _id: string; _creationTime: number; a: string }
25
+ | { _id: string; _creationTime: number; b: string };
26
+ const without2 = withoutSystemFields(obj2);
27
+ expect(without2).toEqual({ a: "a" });
28
+ expectTypeOf(without2).toEqualTypeOf<{ a: string } | { b: string }>();
29
+ });
package/index.ts CHANGED
@@ -95,7 +95,22 @@ export function omit<T extends Record<string, any>, Keys extends (keyof T)[]>(
95
95
  ) {
96
96
  return Object.fromEntries(
97
97
  Object.entries(obj).filter(([k]) => !keys.includes(k as Keys[number])),
98
- ) as BetterOmit<T, Keys[number]>;
98
+ ) as Expand<BetterOmit<T, Keys[number]>>;
99
+ }
100
+
101
+ /**
102
+ * Removes the _id and _creationTime fields from an object.
103
+ * This enables easily cloning a Convex document like:
104
+ * ```ts
105
+ * const doc = await db.get(id);
106
+ * const clone = withoutSystemFields(doc);
107
+ * await db.insert(table, clone);
108
+ * ```
109
+ * @param obj The object to remove the _id and _creationTime fields from.
110
+ * @returns A new object with the _id and _creationTime fields removed.
111
+ */
112
+ export function withoutSystemFields<T extends Record<string, any>>(obj: T) {
113
+ return omit(obj, ["_id", "_creationTime"]);
99
114
  }
100
115
 
101
116
  // Type utils:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "convex-helpers",
3
- "version": "0.1.83",
3
+ "version": "0.1.84",
4
4
  "description": "A collection of useful code to complement the official convex package.",
5
5
  "type": "module",
6
6
  "bin": {