From b0dc2b81a8385c7fabc19ac1a0752e0841dfe7bf Mon Sep 17 00:00:00 2001 From: Nihal Bhatnagar Date: Fri, 31 Jan 2025 14:06:56 -0500 Subject: [PATCH] Accept no ref --- .changeset/forty-seahorses-matter.md | 2 +- .vscode/settings.json | 3 ++- etc/api.report.api.md | 2 +- packages/api/src/OsdkObjectFrom.ts | 2 +- .../convertWireToOsdkObjects/createOsdkObject.ts | 6 +++++- packages/client/src/object/object.test.ts | 14 ++++++++++++++ packages/e2e.sandbox.todoapp/src/useTodos.tsx | 2 +- 7 files changed, 25 insertions(+), 6 deletions(-) diff --git a/.changeset/forty-seahorses-matter.md b/.changeset/forty-seahorses-matter.md index c19a671a8..d5c18dc3a 100644 --- a/.changeset/forty-seahorses-matter.md +++ b/.changeset/forty-seahorses-matter.md @@ -3,4 +3,4 @@ "@osdk/api": patch --- -Exposes $cloneAndUpdate from OSDK Object instances +Exposes $clone from OSDK Object instances diff --git a/.vscode/settings.json b/.vscode/settings.json index 88576ad6a..73a2dd22b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -32,5 +32,6 @@ "\\.\\./.*?/src", "\\.\\./.*?/build", "\\./index.js" - ] + ], + "typescript.preferGoToSourceDefinition": true } diff --git a/etc/api.report.api.md b/etc/api.report.api.md index fd2cd4c57..38c4c0d34 100644 --- a/etc/api.report.api.md +++ b/etc/api.report.api.md @@ -773,7 +773,7 @@ export namespace Osdk { > = OsdkBase & Pick["props"], GetPropsKeys> & { readonly $link: Q extends { linksType?: any } ? Q["linksType"] : Q extends ObjectTypeDefinition ? OsdkObjectLinksObject : never; readonly $as: >(type: NEW_Q | string) => Osdk.Instance>; - readonly $cloneAndUpdate: (updatedObject: Osdk.Instance | { [K in PropertyKeys]? : CompileTimeMetadata["props"][K] }) => Osdk.Instance; + readonly $clone: (updatedObject?: Osdk.Instance | { [K in PropertyKeys]? : CompileTimeMetadata["props"][K] }) => Osdk.Instance; } & (IsNever extends true ? {} : IsAny extends true ? {} : "$rid" extends OPTIONS ? { readonly $rid: string } : {}); } diff --git a/packages/api/src/OsdkObjectFrom.ts b/packages/api/src/OsdkObjectFrom.ts index 53b19b672..393faa85c 100644 --- a/packages/api/src/OsdkObjectFrom.ts +++ b/packages/api/src/OsdkObjectFrom.ts @@ -205,7 +205,7 @@ export namespace Osdk { >; readonly $clone: ( - updatedObject: + updatedObject?: | Osdk.Instance | { [K in PropertyKeys]?: CompileTimeMetadata< diff --git a/packages/client/src/object/convertWireToOsdkObjects/createOsdkObject.ts b/packages/client/src/object/convertWireToOsdkObjects/createOsdkObject.ts index 631d93190..97ed70a46 100644 --- a/packages/client/src/object/convertWireToOsdkObjects/createOsdkObject.ts +++ b/packages/client/src/object/convertWireToOsdkObjects/createOsdkObject.ts @@ -64,11 +64,15 @@ const basePropDefs = { "$clone": { value: function( this: InternalOsdkInstance & ObjectHolder, - update: Record, + update: Record | undefined, ) { const rawObj = this[UnderlyingOsdkObject]; const def = this[ObjectDefRef]; + if (!update) { + return createOsdkObject(this[ClientRef], def, rawObj); + } + if ( def.primaryKeyApiName in update && rawObj[def.primaryKeyApiName] !== update[def.primaryKeyApiName] diff --git a/packages/client/src/object/object.test.ts b/packages/client/src/object/object.test.ts index 0b383f97e..cb576a1dd 100644 --- a/packages/client/src/object/object.test.ts +++ b/packages/client/src/object/object.test.ts @@ -336,6 +336,20 @@ describe("OsdkObject", () => { `); }); + it("is able to clone with nothing passed in", async () => { + expect(employee.$clone()).toMatchObject({ + "$apiName": "Employee", + "$objectType": "Employee", + "$primaryKey": 50031, + "$title": "Jane Doe", + "class": "Blue", + "employeeId": 50031, + "fullName": "Jane Doe", + "office": "SEA", + "startDate": "2012-02-12", + }); + }); + it("throws when merging objects with different primary keys", async () => { expect(() => employee.$clone({ diff --git a/packages/e2e.sandbox.todoapp/src/useTodos.tsx b/packages/e2e.sandbox.todoapp/src/useTodos.tsx index 59b17394c..71ec02544 100644 --- a/packages/e2e.sandbox.todoapp/src/useTodos.tsx +++ b/packages/e2e.sandbox.todoapp/src/useTodos.tsx @@ -124,7 +124,7 @@ export function useTodos() { type OsdkPropsOnly = Omit< Osdk, - "$as" | "$link" | "$cloneAndUpdate" + "$as" | "$link" | "$clone" >; export interface SimpleTodo extends OsdkPropsOnly {}