@@ -11,7 +11,6 @@ import {
11
11
it ,
12
12
} from "@jest/globals" ;
13
13
import {
14
- convertGlideRecordToRecord ,
15
14
Decoder ,
16
15
FlushMode ,
17
16
FunctionRestorePolicy ,
@@ -46,6 +45,56 @@ import {
46
45
waitForScriptNotBusy ,
47
46
} from "./TestUtilities" ;
48
47
48
+ /**
49
+ * @internal
50
+ * Check whether an object is a `GlideRecord` (see {@link GlideRecord}).
51
+ */
52
+ export function isGlideRecord ( obj ?: unknown ) : boolean {
53
+ return (
54
+ Array . isArray ( obj ) &&
55
+ obj . length > 0 &&
56
+ typeof obj [ 0 ] === "object" &&
57
+ "key" in obj [ 0 ] &&
58
+ "value" in obj [ 0 ]
59
+ ) ;
60
+ }
61
+
62
+ /**
63
+ * @internal
64
+ * Check whether an object is a `GlideRecord[]` (see {@link GlideRecord}).
65
+ */
66
+ function isGlideRecordArray ( obj ?: unknown ) : boolean {
67
+ return Array . isArray ( obj ) && obj . length > 0 && isGlideRecord ( obj [ 0 ] ) ;
68
+ }
69
+
70
+ /**
71
+ * @internal
72
+ * Recursively downcast `GlideRecord` to `Record`. Use if `data` keys are always strings.
73
+ */
74
+ export function convertGlideRecordToRecord < T > (
75
+ data : GlideRecord < T > ,
76
+ ) : Record < string , T > {
77
+ const res : Record < string , T > = { } ;
78
+
79
+ for ( const pair of data ) {
80
+ let newVal = pair . value ;
81
+
82
+ if ( isGlideRecord ( pair . value ) ) {
83
+ newVal = convertGlideRecordToRecord (
84
+ pair . value as GlideRecord < unknown > ,
85
+ ) as T ;
86
+ } else if ( isGlideRecordArray ( pair . value ) ) {
87
+ newVal = ( pair . value as GlideRecord < unknown > [ ] ) . map (
88
+ convertGlideRecordToRecord ,
89
+ ) as T ;
90
+ }
91
+
92
+ res [ pair . key as string ] = newVal ;
93
+ }
94
+
95
+ return res ;
96
+ }
97
+
49
98
const TIMEOUT = 50000 ;
50
99
51
100
export declare class Script {
0 commit comments