starlight-fsharp-oracle 0.1.0 → 0.1.2

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 (167) hide show
  1. package/dist/Extensions/StringBuilder.js +2 -5
  2. package/dist/Extensions/TextNode.js +29 -54
  3. package/dist/FSharp.Oracle.Schema/Schema.js +113 -218
  4. package/dist/Generate.js +33 -63
  5. package/dist/Helpers.js +1 -2
  6. package/dist/Plugin.js +17 -31
  7. package/dist/Render/Documentation.js +1 -2
  8. package/dist/Render/Entries.js +29 -34
  9. package/dist/Render/Pages.js +10 -19
  10. package/dist/Render/Primitives.js +19 -32
  11. package/dist/Themes.js +3 -5
  12. package/dist/fable_modules/Fable.Promise.3.2.0/AsyncIterable.fs +57 -0
  13. package/dist/fable_modules/Fable.Promise.3.2.0/AsyncIterable.fs.js +105 -0
  14. package/dist/fable_modules/Fable.Promise.3.2.0/Fable.Promise.fableproj +20 -0
  15. package/dist/fable_modules/Fable.Promise.3.2.0/Promise.fs +766 -0
  16. package/dist/fable_modules/Fable.Promise.3.2.0/Promise.fs.js +232 -0
  17. package/dist/fable_modules/Fable.Promise.3.2.0/PromiseImpl.fs +31 -0
  18. package/dist/fable_modules/Fable.Promise.3.2.0/PromiseImpl.fs.js +20 -0
  19. package/dist/fable_modules/Thoth.Json.Core.0.9.0/Decode.fs +1592 -0
  20. package/dist/fable_modules/Thoth.Json.Core.0.9.0/Decode.fs.js +1417 -0
  21. package/dist/fable_modules/Thoth.Json.Core.0.9.0/DecoderCE.fs +106 -0
  22. package/dist/fable_modules/Thoth.Json.Core.0.9.0/DecoderCE.fs.js +63 -0
  23. package/dist/fable_modules/Thoth.Json.Core.0.9.0/Encode.fs +380 -0
  24. package/dist/fable_modules/Thoth.Json.Core.0.9.0/Encode.fs.js +289 -0
  25. package/dist/fable_modules/Thoth.Json.Core.0.9.0/Thoth.Json.Core.fableproj +37 -0
  26. package/dist/fable_modules/Thoth.Json.Core.0.9.0/Types.fs +76 -0
  27. package/dist/fable_modules/Thoth.Json.Core.0.9.0/Types.fs.js +37 -0
  28. package/dist/fable_modules/Thoth.Json.Core.Auto.0.1.0/Casing.fs +113 -0
  29. package/dist/fable_modules/Thoth.Json.Core.Auto.0.1.0/Casing.fs.js +173 -0
  30. package/dist/fable_modules/Thoth.Json.Core.Auto.0.1.0/Decode.fs +1153 -0
  31. package/dist/fable_modules/Thoth.Json.Core.Auto.0.1.0/Decode.fs.js +622 -0
  32. package/dist/fable_modules/Thoth.Json.Core.Auto.0.1.0/Domain.fs +91 -0
  33. package/dist/fable_modules/Thoth.Json.Core.Auto.0.1.0/Domain.fs.js +103 -0
  34. package/dist/fable_modules/Thoth.Json.Core.Auto.0.1.0/Encode.fs +893 -0
  35. package/dist/fable_modules/Thoth.Json.Core.Auto.0.1.0/Encode.fs.js +836 -0
  36. package/dist/fable_modules/Thoth.Json.Core.Auto.0.1.0/Prelude.fs +435 -0
  37. package/dist/fable_modules/Thoth.Json.Core.Auto.0.1.0/Prelude.fs.js +389 -0
  38. package/dist/fable_modules/Thoth.Json.Core.Auto.0.1.0/Thoth.Json.Core.Auto.fableproj +43 -0
  39. package/dist/fable_modules/Thoth.Json.JavaScript.0.5.0/Decode.fs +88 -0
  40. package/dist/fable_modules/Thoth.Json.JavaScript.0.5.0/Decode.fs.js +102 -0
  41. package/dist/fable_modules/Thoth.Json.JavaScript.0.5.0/Encode.fs +40 -0
  42. package/dist/fable_modules/Thoth.Json.JavaScript.0.5.0/Encode.fs.js +59 -0
  43. package/dist/fable_modules/Thoth.Json.JavaScript.0.5.0/Thoth.Json.JavaScript.fableproj +31 -0
  44. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Array.js +1347 -0
  45. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Async.js +134 -0
  46. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/AsyncBuilder.js +183 -0
  47. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/BigInt.js +306 -0
  48. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/BitConverter.js +138 -0
  49. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Boolean.js +22 -0
  50. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/CHANGELOG.md +191 -0
  51. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Char.js +202 -0
  52. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Choice.js +184 -0
  53. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/CollectionUtil.js +182 -0
  54. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/ConditionalWeakTable.js +21 -0
  55. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Date.js +755 -0
  56. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/DateOffset.js +261 -0
  57. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/DateOnly.js +124 -0
  58. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Decimal.js +236 -0
  59. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Double.js +47 -0
  60. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Encoding.js +185 -0
  61. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Event.js +93 -0
  62. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/FSharp.Collections.js +45 -0
  63. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/FSharp.Core.CompilerServices.js +27 -0
  64. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/FSharp.Core.js +156 -0
  65. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Global.js +29 -0
  66. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Guid.js +161 -0
  67. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Int32.js +135 -0
  68. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/List.js +1323 -0
  69. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Long.js +47 -0
  70. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/MailboxProcessor.js +94 -0
  71. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Map.js +1396 -0
  72. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/MapUtil.js +130 -0
  73. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/MutableMap.js +339 -0
  74. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/MutableSet.js +233 -0
  75. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Native.js +14 -0
  76. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Numeric.js +75 -0
  77. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Observable.js +113 -0
  78. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Option.js +104 -0
  79. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/README.md +3 -0
  80. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Random.js +172 -0
  81. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Range.js +45 -0
  82. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Reflection.js +460 -0
  83. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/RegExp.js +141 -0
  84. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Result.js +165 -0
  85. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Seq.js +1409 -0
  86. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Seq2.js +111 -0
  87. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Set.js +1788 -0
  88. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/String.js +649 -0
  89. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/System.Collections.Generic.js +333 -0
  90. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/System.Text.js +168 -0
  91. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/System.js +283 -0
  92. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/TimeOnly.js +122 -0
  93. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/TimeSpan.js +180 -0
  94. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Timer.js +67 -0
  95. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Types.js +198 -0
  96. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Unicode.13.0.0.js +4 -0
  97. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Uri.js +165 -0
  98. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/Util.js +792 -0
  99. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/big.d.ts +338 -0
  100. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/lib/big.js +825 -0
  101. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/package.json +24 -0
  102. package/dist/fable_modules/fable-library-js.5.0.0-rc.7/quotation.js +618 -0
  103. package/package.json +4 -5
  104. package/packages/FSharp.Oracle/XmlDoc.fs +12 -1
  105. package/packages/FSharp.Oracle/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.fs +3 -0
  106. package/packages/FSharp.Oracle/obj/Debug/net10.0/FSharp.Oracle.AssemblyInfo.fs +17 -0
  107. package/packages/FSharp.Oracle/obj/Release/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.fs +3 -0
  108. package/packages/FSharp.Oracle/obj/Release/net10.0/FSharp.Oracle.AssemblyInfo.fs +17 -0
  109. package/packages/FSharp.Oracle.Schema/obj/Debug/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.fs +3 -0
  110. package/packages/FSharp.Oracle.Schema/obj/Debug/net10.0/FSharp.Oracle.Schema.AssemblyInfo.fs +17 -0
  111. package/packages/FSharp.Oracle.Schema/obj/Release/net10.0/.NETCoreApp,Version=v10.0.AssemblyAttributes.fs +3 -0
  112. package/packages/FSharp.Oracle.Schema/obj/Release/net10.0/FSharp.Oracle.Schema.AssemblyInfo.fs +17 -0
  113. package/oracle-bin/FSharp.Compiler.Service.dll +0 -0
  114. package/oracle-bin/FSharp.Core.dll +0 -0
  115. package/oracle-bin/FSharp.DependencyManager.Nuget.dll +0 -0
  116. package/oracle-bin/FSharp.Oracle.Schema.dll +0 -0
  117. package/oracle-bin/FSharp.Oracle.Schema.pdb +0 -0
  118. package/oracle-bin/FSharp.Oracle.Schema.xml +0 -219
  119. package/oracle-bin/Fable.Core.dll +0 -0
  120. package/oracle-bin/Oracle +0 -0
  121. package/oracle-bin/Oracle.deps.json +0 -280
  122. package/oracle-bin/Oracle.dll +0 -0
  123. package/oracle-bin/Oracle.pdb +0 -0
  124. package/oracle-bin/Oracle.runtimeconfig.json +0 -13
  125. package/oracle-bin/Oracle.xml +0 -111
  126. package/oracle-bin/Thoth.Json.Core.Auto.dll +0 -0
  127. package/oracle-bin/Thoth.Json.Core.dll +0 -0
  128. package/oracle-bin/Thoth.Json.System.Text.Json.dll +0 -0
  129. package/oracle-bin/cs/FSharp.Compiler.Service.resources.dll +0 -0
  130. package/oracle-bin/cs/FSharp.Core.resources.dll +0 -0
  131. package/oracle-bin/cs/FSharp.DependencyManager.Nuget.resources.dll +0 -0
  132. package/oracle-bin/de/FSharp.Compiler.Service.resources.dll +0 -0
  133. package/oracle-bin/de/FSharp.Core.resources.dll +0 -0
  134. package/oracle-bin/de/FSharp.DependencyManager.Nuget.resources.dll +0 -0
  135. package/oracle-bin/es/FSharp.Compiler.Service.resources.dll +0 -0
  136. package/oracle-bin/es/FSharp.Core.resources.dll +0 -0
  137. package/oracle-bin/es/FSharp.DependencyManager.Nuget.resources.dll +0 -0
  138. package/oracle-bin/fr/FSharp.Compiler.Service.resources.dll +0 -0
  139. package/oracle-bin/fr/FSharp.Core.resources.dll +0 -0
  140. package/oracle-bin/fr/FSharp.DependencyManager.Nuget.resources.dll +0 -0
  141. package/oracle-bin/it/FSharp.Compiler.Service.resources.dll +0 -0
  142. package/oracle-bin/it/FSharp.Core.resources.dll +0 -0
  143. package/oracle-bin/it/FSharp.DependencyManager.Nuget.resources.dll +0 -0
  144. package/oracle-bin/ja/FSharp.Compiler.Service.resources.dll +0 -0
  145. package/oracle-bin/ja/FSharp.Core.resources.dll +0 -0
  146. package/oracle-bin/ja/FSharp.DependencyManager.Nuget.resources.dll +0 -0
  147. package/oracle-bin/ko/FSharp.Compiler.Service.resources.dll +0 -0
  148. package/oracle-bin/ko/FSharp.Core.resources.dll +0 -0
  149. package/oracle-bin/ko/FSharp.DependencyManager.Nuget.resources.dll +0 -0
  150. package/oracle-bin/pl/FSharp.Compiler.Service.resources.dll +0 -0
  151. package/oracle-bin/pl/FSharp.Core.resources.dll +0 -0
  152. package/oracle-bin/pl/FSharp.DependencyManager.Nuget.resources.dll +0 -0
  153. package/oracle-bin/pt-BR/FSharp.Compiler.Service.resources.dll +0 -0
  154. package/oracle-bin/pt-BR/FSharp.Core.resources.dll +0 -0
  155. package/oracle-bin/pt-BR/FSharp.DependencyManager.Nuget.resources.dll +0 -0
  156. package/oracle-bin/ru/FSharp.Compiler.Service.resources.dll +0 -0
  157. package/oracle-bin/ru/FSharp.Core.resources.dll +0 -0
  158. package/oracle-bin/ru/FSharp.DependencyManager.Nuget.resources.dll +0 -0
  159. package/oracle-bin/tr/FSharp.Compiler.Service.resources.dll +0 -0
  160. package/oracle-bin/tr/FSharp.Core.resources.dll +0 -0
  161. package/oracle-bin/tr/FSharp.DependencyManager.Nuget.resources.dll +0 -0
  162. package/oracle-bin/zh-Hans/FSharp.Compiler.Service.resources.dll +0 -0
  163. package/oracle-bin/zh-Hans/FSharp.Core.resources.dll +0 -0
  164. package/oracle-bin/zh-Hans/FSharp.DependencyManager.Nuget.resources.dll +0 -0
  165. package/oracle-bin/zh-Hant/FSharp.Compiler.Service.resources.dll +0 -0
  166. package/oracle-bin/zh-Hant/FSharp.Core.resources.dll +0 -0
  167. package/oracle-bin/zh-Hant/FSharp.DependencyManager.Nuget.resources.dll +0 -0
@@ -0,0 +1,435 @@
1
+ namespace Thoth.Json.Core.Auto
2
+
3
+ open System
4
+ open System.Collections.Generic
5
+ open FSharp.Reflection
6
+
7
+ [<AutoOpen>]
8
+ module internal Prelude =
9
+
10
+ type FSharpValue with
11
+
12
+ static member MakeList(elementType: Type, elements: seq<obj>) : obj =
13
+ let objListType = typedefof<obj list>
14
+ let listType = objListType.MakeGenericType(elementType)
15
+ let ucis = FSharpType.GetUnionCases(listType)
16
+ let emptyUci = ucis |> Seq.find (fun uci -> uci.Name = "Empty")
17
+ let consUci = ucis |> Seq.find (fun uci -> uci.Name = "Cons")
18
+ let empty = FSharpValue.MakeUnion(emptyUci, [||])
19
+
20
+ elements
21
+ |> Seq.rev
22
+ |> Seq.fold
23
+ (fun acc x ->
24
+ FSharpValue.MakeUnion(
25
+ consUci,
26
+ [|
27
+ x
28
+ acc
29
+ |]
30
+ )
31
+ )
32
+ empty
33
+
34
+ [<RequireQualifiedAccess>]
35
+ module Map =
36
+
37
+ let merge (a: Map<'k, 'v>) (b: Map<'k, 'v>) =
38
+ if a = b then
39
+ a
40
+ else
41
+ seq {
42
+ for KeyValue(k, v) in a do
43
+ yield k, v
44
+
45
+ for KeyValue(k, v) in b do
46
+ yield k, v
47
+ }
48
+ |> Map.ofSeq
49
+
50
+ [<RequireQualifiedAccess>]
51
+ module Lazy =
52
+
53
+ #if FABLE_COMPILER
54
+ let makeGeneric (ty: Type) (func: obj) : obj =
55
+ let factory: unit -> obj = unbox func
56
+ Lazy<obj>(factory) |> box
57
+ #else
58
+ open System.Reflection
59
+
60
+ type private LazyHelper =
61
+ static member Create<'t>(factory: unit -> 't) : Lazy<'t> =
62
+ Lazy<'t>(factory, true)
63
+
64
+ let lazyCreateMethodDefinition =
65
+ typeof<LazyHelper>
66
+ .GetMethods(BindingFlags.Static ||| BindingFlags.NonPublic)
67
+ |> Seq.filter (fun x -> x.Name = "Create")
68
+ |> Seq.exactlyOne
69
+ |> fun mi -> mi.GetGenericMethodDefinition()
70
+
71
+ /// Creates a lazy value of the given type.
72
+ /// ty is the type of 't
73
+ /// func is a boxed value of unit -> 't
74
+ let makeGeneric (ty: Type) (func: obj) =
75
+ lazyCreateMethodDefinition
76
+ .MakeGenericMethod([| ty |])
77
+ .Invoke(null, [| func |])
78
+ #endif
79
+
80
+ [<AutoOpen>]
81
+ module internal ActivePatterns =
82
+
83
+ let (|UnitType|_|) (ty: Type) =
84
+ if ty.FullName = typeof<unit>.FullName then
85
+ Some()
86
+ else
87
+ None
88
+
89
+ let (|StringType|_|) (ty: Type) =
90
+ if ty.FullName = typeof<string>.FullName then
91
+ Some()
92
+ else
93
+ None
94
+
95
+ let (|CharType|_|) (ty: Type) =
96
+ if ty.FullName = typeof<char>.FullName then
97
+ Some()
98
+ else
99
+ None
100
+
101
+ let (|IntType|_|) (ty: Type) =
102
+ if ty.FullName = typeof<int>.FullName then
103
+ Some()
104
+ else
105
+ None
106
+
107
+ let (|BoolType|_|) (ty: Type) =
108
+ if ty.FullName = typeof<bool>.FullName then
109
+ Some()
110
+ else
111
+ None
112
+
113
+ let (|Int64Type|_|) (ty: Type) =
114
+ if ty.FullName = typeof<int64>.FullName then
115
+ Some()
116
+ else
117
+ None
118
+
119
+ let (|SingleType|_|) (ty: Type) =
120
+ if ty.FullName = typeof<float32>.FullName then
121
+ Some()
122
+ else
123
+ None
124
+
125
+ let (|DoubleType|_|) (ty: Type) =
126
+ if ty.FullName = typeof<float>.FullName then
127
+ Some()
128
+ else
129
+ None
130
+
131
+ let (|DecimalType|_|) (ty: Type) =
132
+ if ty.FullName = typeof<decimal>.FullName then
133
+ Some()
134
+ else
135
+ None
136
+
137
+ let (|ByteType|_|) (ty: Type) =
138
+ if ty.FullName = typeof<byte>.FullName then
139
+ Some()
140
+ else
141
+ None
142
+
143
+ let (|SByteType|_|) (ty: Type) =
144
+ if ty.FullName = typeof<sbyte>.FullName then
145
+ Some()
146
+ else
147
+ None
148
+
149
+ let (|UInt16Type|_|) (ty: Type) =
150
+ if ty.FullName = typeof<uint16>.FullName then
151
+ Some()
152
+ else
153
+ None
154
+
155
+ let (|Int16Type|_|) (ty: Type) =
156
+ if ty.FullName = typeof<int16>.FullName then
157
+ Some()
158
+ else
159
+ None
160
+
161
+ let (|UIntType|_|) (ty: Type) =
162
+ if ty.FullName = typeof<uint>.FullName then
163
+ Some()
164
+ else
165
+ None
166
+
167
+ let (|UInt64Type|_|) (ty: Type) =
168
+ if ty.FullName = typeof<uint64>.FullName then
169
+ Some()
170
+ else
171
+ None
172
+
173
+ let (|BigIntType|_|) (ty: Type) =
174
+ if ty.FullName = typeof<bigint>.FullName then
175
+ Some()
176
+ else
177
+ None
178
+
179
+ let (|GuidType|_|) (ty: Type) =
180
+ if ty.FullName = typeof<Guid>.FullName then
181
+ Some()
182
+ else
183
+ None
184
+
185
+ let (|TimeSpanType|_|) (ty: Type) =
186
+ if ty.FullName = typeof<TimeSpan>.FullName then
187
+ Some()
188
+ else
189
+ None
190
+
191
+ let (|DateTimeType|_|) (ty: Type) =
192
+ if ty.FullName = typeof<DateTime>.FullName then
193
+ Some()
194
+ else
195
+ None
196
+
197
+ let (|DateTimeOffsetType|_|) (ty: Type) =
198
+ if ty.FullName = typeof<DateTimeOffset>.FullName then
199
+ Some()
200
+ else
201
+ None
202
+
203
+ let (|OptionType|_|) (ty: Type) =
204
+ if
205
+ ty.IsGenericType
206
+ && ty.GetGenericTypeDefinition() = typedefof<obj option>
207
+ then
208
+ Some(ty.GetGenericArguments()[0])
209
+ else
210
+ None
211
+
212
+ let (|ListType|_|) (ty: Type) =
213
+ if
214
+ ty.IsGenericType
215
+ && ty.GetGenericTypeDefinition() = typedefof<obj list>
216
+ then
217
+ Some(ty.GetGenericArguments()[0])
218
+ else
219
+ None
220
+
221
+ let (|MapType|_|) (ty: Type) =
222
+ if
223
+ ty.IsGenericType
224
+ && ty.GetGenericTypeDefinition() = typedefof<Map<int, obj>>
225
+ then
226
+ Some(ty.GetGenericArguments()[0], ty.GetGenericArguments()[1])
227
+ else
228
+ None
229
+
230
+ let (|ArrayType|_|) (ty: Type) =
231
+ #if FABLE_COMPILER
232
+ if ty.IsArray then
233
+ Some(ty.GetElementType())
234
+ else
235
+ None
236
+ #else
237
+ if ty.IsArray && ty.GetArrayRank() = 1 then
238
+ Some(ty.GetElementType())
239
+ else
240
+ None
241
+ #endif
242
+
243
+ let (|SeqType|_|) (ty: Type) =
244
+ if
245
+ ty.IsGenericType
246
+ && ty.GetGenericTypeDefinition() = typedefof<obj seq>
247
+ then
248
+ Some(ty.GetGenericArguments()[0])
249
+ else
250
+ None
251
+
252
+ let (|SetType|_|) (ty: Type) =
253
+ if
254
+ ty.IsGenericType
255
+ && ty.GetGenericTypeDefinition() = typedefof<Set<int>>
256
+ then
257
+ Some(ty.GetGenericArguments()[0])
258
+ else
259
+ None
260
+
261
+ let (|FSharpRecordType|_|) (ty: Type) =
262
+ #if FABLE_COMPILER_PYTHON
263
+ if FSharpType.IsRecord(ty) then
264
+ Some(FSharpType.GetRecordFields(ty))
265
+ else
266
+ None
267
+ #else
268
+ if FSharpType.IsRecord(ty, true) then
269
+ Some(
270
+ FSharpType.GetRecordFields(
271
+ ty,
272
+ allowAccessToPrivateRepresentation = true
273
+ )
274
+ )
275
+ else
276
+ None
277
+ #endif
278
+
279
+ let (|FSharpUnionType|_|) (ty: Type) =
280
+ #if FABLE_COMPILER_PYTHON
281
+ if FSharpType.IsUnion(ty) then
282
+ Some(FSharpType.GetUnionCases(ty))
283
+ else
284
+ None
285
+ #else
286
+ if FSharpType.IsUnion(ty, true) then
287
+ Some(
288
+ FSharpType.GetUnionCases(
289
+ ty,
290
+ allowAccessToPrivateRepresentation = true
291
+ )
292
+ )
293
+ else
294
+ None
295
+ #endif
296
+
297
+ let (|FSharpTupleType|_|) (ty: Type) =
298
+ if FSharpType.IsTuple(ty) then
299
+ Some(FSharpType.GetTupleElements(ty))
300
+ else
301
+ None
302
+
303
+ let (|EnumType|_|) (ty: Type) =
304
+ if ty.IsEnum then
305
+ Some(ty.GetEnumUnderlyingType())
306
+ else
307
+ None
308
+
309
+ #if !FABLE_COMPILER
310
+ let (|StringEnum|_|) (ty: Type) =
311
+ ty.CustomAttributes
312
+ |> Seq.tryPick (
313
+ function
314
+ | attr when
315
+ attr.AttributeType.FullName = "Fable.Core.StringEnumAttribute"
316
+ ->
317
+ Some attr
318
+ | _ -> None
319
+ )
320
+ #endif
321
+
322
+ #if !FABLE_COMPILER
323
+ let (|CompiledName|_|) (caseInfo: UnionCaseInfo) =
324
+ caseInfo.GetCustomAttributes()
325
+ |> Seq.tryPick (
326
+ function
327
+ | :? CompiledNameAttribute as att -> Some att.CompiledName
328
+ | _ -> None
329
+ )
330
+ #endif
331
+
332
+ #if !FABLE_COMPILER
333
+ let (|LowerFirst|Forward|)
334
+ (args: IList<Reflection.CustomAttributeTypedArgument>)
335
+ =
336
+ args
337
+ |> Seq.tryPick (
338
+ function
339
+ | rule when
340
+ rule.ArgumentType.FullName = typeof<Fable.Core.CaseRules>
341
+ .FullName
342
+ ->
343
+ Some rule
344
+ | _ -> None
345
+ )
346
+ |> function
347
+ | Some rule ->
348
+ match rule.Value with
349
+ | :? int as value ->
350
+ match value with
351
+ | 0 -> Forward
352
+ | 1 -> LowerFirst
353
+ | _ -> LowerFirst // should not happen
354
+ | _ -> LowerFirst // should not happen
355
+ | None -> LowerFirst
356
+ #endif
357
+
358
+ [<RequireQualifiedAccess>]
359
+ module Type =
360
+
361
+ let isRecursive (ty: Type) =
362
+ let rec loop (seen: Set<string>) (current: Type) =
363
+ match current with
364
+ | FSharpTupleType elementTypes ->
365
+ if Array.contains ty elementTypes then
366
+ true
367
+ else
368
+ let seenNext =
369
+ Set.union
370
+ seen
371
+ (elementTypes
372
+ |> Array.map (fun ty -> ty.FullName)
373
+ |> Set.ofArray)
374
+
375
+ elementTypes
376
+ |> Seq.filter (fun ty ->
377
+ not (Set.contains ty.FullName seen)
378
+ )
379
+ |> Seq.exists (fun ty -> loop seenNext ty)
380
+ | current when
381
+ current.IsGenericType
382
+ && current.GetGenericTypeDefinition() = typedefof<obj list>
383
+ ->
384
+ let elementType =
385
+ current.GetGenericArguments() |> Array.head
386
+
387
+ if elementType = ty then
388
+ true
389
+ else
390
+ let seenNext = Set.add elementType.FullName seen
391
+
392
+ loop seenNext elementType
393
+ | FSharpRecordType fields ->
394
+ let fieldTypes =
395
+ fields |> Array.map (fun pi -> pi.PropertyType)
396
+
397
+ if Array.contains ty fieldTypes then
398
+ true
399
+ else
400
+ let seenNext =
401
+ Set.union
402
+ seen
403
+ (fieldTypes
404
+ |> Array.map (fun ty -> ty.FullName)
405
+ |> Set.ofArray)
406
+
407
+ fieldTypes
408
+ |> Seq.filter (fun ty ->
409
+ not (Set.contains ty.FullName seen)
410
+ )
411
+ |> Seq.exists (fun ty -> loop seenNext ty)
412
+ | FSharpUnionType fields ->
413
+ let fieldTypes =
414
+ fields
415
+ |> Array.collect (fun uci -> uci.GetFields())
416
+ |> Array.map (fun pi -> pi.PropertyType)
417
+
418
+ if Array.contains ty fieldTypes then
419
+ true
420
+ else
421
+ let seenNext =
422
+ Set.union
423
+ seen
424
+ (fieldTypes
425
+ |> Array.map (fun ty -> ty.FullName)
426
+ |> Set.ofArray)
427
+
428
+ fieldTypes
429
+ |> Seq.filter (fun ty ->
430
+ not (Set.contains ty.FullName seen)
431
+ )
432
+ |> Seq.exists (fun ty -> loop seenNext ty)
433
+ | _ -> false
434
+
435
+ loop Set.empty ty