@terascope/data-mate 2.24.0 → 2.25.0

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 (759) hide show
  1. package/bin/duckdb-extensions.js +8 -0
  2. package/dist/src/adapters/index.d.ts +1 -0
  3. package/dist/src/adapters/index.d.ts.map +1 -1
  4. package/dist/src/adapters/index.js +1 -0
  5. package/dist/src/adapters/index.js.map +1 -1
  6. package/dist/src/adapters/teal-frame-adapter/index.d.ts +62 -0
  7. package/dist/src/adapters/teal-frame-adapter/index.d.ts.map +1 -0
  8. package/dist/src/adapters/teal-frame-adapter/index.js +427 -0
  9. package/dist/src/adapters/teal-frame-adapter/index.js.map +1 -0
  10. package/dist/src/core/utils.d.ts +1 -1
  11. package/dist/src/core/utils.d.ts.map +1 -1
  12. package/dist/src/core/utils.js.map +1 -1
  13. package/dist/src/function-configs/boolean/isBoolean.d.ts.map +1 -1
  14. package/dist/src/function-configs/boolean/isBoolean.js +11 -0
  15. package/dist/src/function-configs/boolean/isBoolean.js.map +1 -1
  16. package/dist/src/function-configs/boolean/isBooleanLike.d.ts.map +1 -1
  17. package/dist/src/function-configs/boolean/isBooleanLike.js +21 -0
  18. package/dist/src/function-configs/boolean/isBooleanLike.js.map +1 -1
  19. package/dist/src/function-configs/boolean/sql-utils.d.ts +31 -0
  20. package/dist/src/function-configs/boolean/sql-utils.d.ts.map +1 -0
  21. package/dist/src/function-configs/boolean/sql-utils.js +52 -0
  22. package/dist/src/function-configs/boolean/sql-utils.js.map +1 -0
  23. package/dist/src/function-configs/boolean/toBoolean.d.ts.map +1 -1
  24. package/dist/src/function-configs/boolean/toBoolean.js +20 -0
  25. package/dist/src/function-configs/boolean/toBoolean.js.map +1 -1
  26. package/dist/src/function-configs/date/addToDate.d.ts.map +1 -1
  27. package/dist/src/function-configs/date/addToDate.js +13 -0
  28. package/dist/src/function-configs/date/addToDate.js.map +1 -1
  29. package/dist/src/function-configs/date/formatDate.d.ts.map +1 -1
  30. package/dist/src/function-configs/date/formatDate.js +29 -0
  31. package/dist/src/function-configs/date/formatDate.js.map +1 -1
  32. package/dist/src/function-configs/date/getDate.d.ts.map +1 -1
  33. package/dist/src/function-configs/date/getDate.js +13 -0
  34. package/dist/src/function-configs/date/getDate.js.map +1 -1
  35. package/dist/src/function-configs/date/getHours.d.ts.map +1 -1
  36. package/dist/src/function-configs/date/getHours.js +13 -0
  37. package/dist/src/function-configs/date/getHours.js.map +1 -1
  38. package/dist/src/function-configs/date/getMilliseconds.d.ts.map +1 -1
  39. package/dist/src/function-configs/date/getMilliseconds.js +16 -0
  40. package/dist/src/function-configs/date/getMilliseconds.js.map +1 -1
  41. package/dist/src/function-configs/date/getMinutes.d.ts.map +1 -1
  42. package/dist/src/function-configs/date/getMinutes.js +13 -0
  43. package/dist/src/function-configs/date/getMinutes.js.map +1 -1
  44. package/dist/src/function-configs/date/getMonth.d.ts.map +1 -1
  45. package/dist/src/function-configs/date/getMonth.js +16 -0
  46. package/dist/src/function-configs/date/getMonth.js.map +1 -1
  47. package/dist/src/function-configs/date/getSeconds.d.ts.map +1 -1
  48. package/dist/src/function-configs/date/getSeconds.js +13 -0
  49. package/dist/src/function-configs/date/getSeconds.js.map +1 -1
  50. package/dist/src/function-configs/date/getTimeBetween.d.ts.map +1 -1
  51. package/dist/src/function-configs/date/getTimeBetween.js +13 -0
  52. package/dist/src/function-configs/date/getTimeBetween.js.map +1 -1
  53. package/dist/src/function-configs/date/getTimezoneOffset.d.ts.map +1 -1
  54. package/dist/src/function-configs/date/getTimezoneOffset.js +12 -0
  55. package/dist/src/function-configs/date/getTimezoneOffset.js.map +1 -1
  56. package/dist/src/function-configs/date/getUTCDate.d.ts.map +1 -1
  57. package/dist/src/function-configs/date/getUTCDate.js +14 -0
  58. package/dist/src/function-configs/date/getUTCDate.js.map +1 -1
  59. package/dist/src/function-configs/date/getUTCHours.d.ts.map +1 -1
  60. package/dist/src/function-configs/date/getUTCHours.js +14 -0
  61. package/dist/src/function-configs/date/getUTCHours.js.map +1 -1
  62. package/dist/src/function-configs/date/getUTCMinutes.d.ts.map +1 -1
  63. package/dist/src/function-configs/date/getUTCMinutes.js +14 -0
  64. package/dist/src/function-configs/date/getUTCMinutes.js.map +1 -1
  65. package/dist/src/function-configs/date/getUTCMonth.d.ts.map +1 -1
  66. package/dist/src/function-configs/date/getUTCMonth.js +16 -0
  67. package/dist/src/function-configs/date/getUTCMonth.js.map +1 -1
  68. package/dist/src/function-configs/date/getUTCYear.d.ts.map +1 -1
  69. package/dist/src/function-configs/date/getUTCYear.js +14 -0
  70. package/dist/src/function-configs/date/getUTCYear.js.map +1 -1
  71. package/dist/src/function-configs/date/getYear.d.ts.map +1 -1
  72. package/dist/src/function-configs/date/getYear.js +13 -0
  73. package/dist/src/function-configs/date/getYear.js.map +1 -1
  74. package/dist/src/function-configs/date/isAfter.d.ts.map +1 -1
  75. package/dist/src/function-configs/date/isAfter.js +9 -0
  76. package/dist/src/function-configs/date/isAfter.js.map +1 -1
  77. package/dist/src/function-configs/date/isBefore.d.ts.map +1 -1
  78. package/dist/src/function-configs/date/isBefore.js +7 -0
  79. package/dist/src/function-configs/date/isBefore.js.map +1 -1
  80. package/dist/src/function-configs/date/isBetween.d.ts.map +1 -1
  81. package/dist/src/function-configs/date/isBetween.js +11 -0
  82. package/dist/src/function-configs/date/isBetween.js.map +1 -1
  83. package/dist/src/function-configs/date/isDate.d.ts.map +1 -1
  84. package/dist/src/function-configs/date/isDate.js +11 -0
  85. package/dist/src/function-configs/date/isDate.js.map +1 -1
  86. package/dist/src/function-configs/date/isEpoch.d.ts.map +1 -1
  87. package/dist/src/function-configs/date/isEpoch.js +12 -0
  88. package/dist/src/function-configs/date/isEpoch.js.map +1 -1
  89. package/dist/src/function-configs/date/isEpochMillis.d.ts.map +1 -1
  90. package/dist/src/function-configs/date/isEpochMillis.js +6 -0
  91. package/dist/src/function-configs/date/isEpochMillis.js.map +1 -1
  92. package/dist/src/function-configs/date/isFriday.d.ts.map +1 -1
  93. package/dist/src/function-configs/date/isFriday.js +11 -0
  94. package/dist/src/function-configs/date/isFriday.js.map +1 -1
  95. package/dist/src/function-configs/date/isFuture.d.ts.map +1 -1
  96. package/dist/src/function-configs/date/isFuture.js +11 -0
  97. package/dist/src/function-configs/date/isFuture.js.map +1 -1
  98. package/dist/src/function-configs/date/isISO8601.d.ts.map +1 -1
  99. package/dist/src/function-configs/date/isISO8601.js +9 -0
  100. package/dist/src/function-configs/date/isISO8601.js.map +1 -1
  101. package/dist/src/function-configs/date/isLeapYear.d.ts.map +1 -1
  102. package/dist/src/function-configs/date/isLeapYear.js +13 -0
  103. package/dist/src/function-configs/date/isLeapYear.js.map +1 -1
  104. package/dist/src/function-configs/date/isMonday.d.ts.map +1 -1
  105. package/dist/src/function-configs/date/isMonday.js +11 -0
  106. package/dist/src/function-configs/date/isMonday.js.map +1 -1
  107. package/dist/src/function-configs/date/isPast.d.ts.map +1 -1
  108. package/dist/src/function-configs/date/isPast.js +11 -0
  109. package/dist/src/function-configs/date/isPast.js.map +1 -1
  110. package/dist/src/function-configs/date/isSaturday.d.ts.map +1 -1
  111. package/dist/src/function-configs/date/isSaturday.js +11 -0
  112. package/dist/src/function-configs/date/isSaturday.js.map +1 -1
  113. package/dist/src/function-configs/date/isSunday.d.ts.map +1 -1
  114. package/dist/src/function-configs/date/isSunday.js +11 -0
  115. package/dist/src/function-configs/date/isSunday.js.map +1 -1
  116. package/dist/src/function-configs/date/isThursday.d.ts.map +1 -1
  117. package/dist/src/function-configs/date/isThursday.js +11 -0
  118. package/dist/src/function-configs/date/isThursday.js.map +1 -1
  119. package/dist/src/function-configs/date/isToday.d.ts.map +1 -1
  120. package/dist/src/function-configs/date/isToday.js +12 -0
  121. package/dist/src/function-configs/date/isToday.js.map +1 -1
  122. package/dist/src/function-configs/date/isTomorrow.d.ts.map +1 -1
  123. package/dist/src/function-configs/date/isTomorrow.js +11 -0
  124. package/dist/src/function-configs/date/isTomorrow.js.map +1 -1
  125. package/dist/src/function-configs/date/isTuesday.d.ts.map +1 -1
  126. package/dist/src/function-configs/date/isTuesday.js +11 -0
  127. package/dist/src/function-configs/date/isTuesday.js.map +1 -1
  128. package/dist/src/function-configs/date/isWednesday.d.ts.map +1 -1
  129. package/dist/src/function-configs/date/isWednesday.js +11 -0
  130. package/dist/src/function-configs/date/isWednesday.js.map +1 -1
  131. package/dist/src/function-configs/date/isWeekday.d.ts.map +1 -1
  132. package/dist/src/function-configs/date/isWeekday.js +9 -0
  133. package/dist/src/function-configs/date/isWeekday.js.map +1 -1
  134. package/dist/src/function-configs/date/isWeekend.d.ts.map +1 -1
  135. package/dist/src/function-configs/date/isWeekend.js +9 -0
  136. package/dist/src/function-configs/date/isWeekend.js.map +1 -1
  137. package/dist/src/function-configs/date/isYesterday.d.ts.map +1 -1
  138. package/dist/src/function-configs/date/isYesterday.js +11 -0
  139. package/dist/src/function-configs/date/isYesterday.js.map +1 -1
  140. package/dist/src/function-configs/date/setDate.d.ts.map +1 -1
  141. package/dist/src/function-configs/date/setDate.js +11 -0
  142. package/dist/src/function-configs/date/setDate.js.map +1 -1
  143. package/dist/src/function-configs/date/setHours.d.ts.map +1 -1
  144. package/dist/src/function-configs/date/setHours.js +8 -0
  145. package/dist/src/function-configs/date/setHours.js.map +1 -1
  146. package/dist/src/function-configs/date/setMilliseconds.d.ts.map +1 -1
  147. package/dist/src/function-configs/date/setMilliseconds.js +12 -0
  148. package/dist/src/function-configs/date/setMilliseconds.js.map +1 -1
  149. package/dist/src/function-configs/date/setMinutes.d.ts.map +1 -1
  150. package/dist/src/function-configs/date/setMinutes.js +8 -0
  151. package/dist/src/function-configs/date/setMinutes.js.map +1 -1
  152. package/dist/src/function-configs/date/setMonth.d.ts.map +1 -1
  153. package/dist/src/function-configs/date/setMonth.js +16 -0
  154. package/dist/src/function-configs/date/setMonth.js.map +1 -1
  155. package/dist/src/function-configs/date/setSeconds.d.ts.map +1 -1
  156. package/dist/src/function-configs/date/setSeconds.js +9 -0
  157. package/dist/src/function-configs/date/setSeconds.js.map +1 -1
  158. package/dist/src/function-configs/date/setTimezone.d.ts.map +1 -1
  159. package/dist/src/function-configs/date/setTimezone.js +13 -0
  160. package/dist/src/function-configs/date/setTimezone.js.map +1 -1
  161. package/dist/src/function-configs/date/setYear.d.ts.map +1 -1
  162. package/dist/src/function-configs/date/setYear.js +15 -0
  163. package/dist/src/function-configs/date/setYear.js.map +1 -1
  164. package/dist/src/function-configs/date/sql-utils.d.ts +89 -0
  165. package/dist/src/function-configs/date/sql-utils.d.ts.map +1 -0
  166. package/dist/src/function-configs/date/sql-utils.js +198 -0
  167. package/dist/src/function-configs/date/sql-utils.js.map +1 -0
  168. package/dist/src/function-configs/date/subtractFromDate.d.ts.map +1 -1
  169. package/dist/src/function-configs/date/subtractFromDate.js +10 -0
  170. package/dist/src/function-configs/date/subtractFromDate.js.map +1 -1
  171. package/dist/src/function-configs/date/toDailyDate.d.ts.map +1 -1
  172. package/dist/src/function-configs/date/toDailyDate.js +11 -0
  173. package/dist/src/function-configs/date/toDailyDate.js.map +1 -1
  174. package/dist/src/function-configs/date/toDate.d.ts.map +1 -1
  175. package/dist/src/function-configs/date/toDate.js +17 -0
  176. package/dist/src/function-configs/date/toDate.js.map +1 -1
  177. package/dist/src/function-configs/date/toHourlyDate.d.ts.map +1 -1
  178. package/dist/src/function-configs/date/toHourlyDate.js +11 -0
  179. package/dist/src/function-configs/date/toHourlyDate.js.map +1 -1
  180. package/dist/src/function-configs/date/toMonthlyDate.d.ts.map +1 -1
  181. package/dist/src/function-configs/date/toMonthlyDate.js +11 -0
  182. package/dist/src/function-configs/date/toMonthlyDate.js.map +1 -1
  183. package/dist/src/function-configs/date/toTimeZone.d.ts.map +1 -1
  184. package/dist/src/function-configs/date/toTimeZone.js +13 -0
  185. package/dist/src/function-configs/date/toTimeZone.js.map +1 -1
  186. package/dist/src/function-configs/date/toTimeZoneUsingLocation.d.ts.map +1 -1
  187. package/dist/src/function-configs/date/toTimeZoneUsingLocation.js +22 -0
  188. package/dist/src/function-configs/date/toTimeZoneUsingLocation.js.map +1 -1
  189. package/dist/src/function-configs/date/toYearlyDate.d.ts.map +1 -1
  190. package/dist/src/function-configs/date/toYearlyDate.js +11 -0
  191. package/dist/src/function-configs/date/toYearlyDate.js.map +1 -1
  192. package/dist/src/function-configs/geo/geoContains.d.ts.map +1 -1
  193. package/dist/src/function-configs/geo/geoContains.js +11 -0
  194. package/dist/src/function-configs/geo/geoContains.js.map +1 -1
  195. package/dist/src/function-configs/geo/geoContainsPoint.d.ts.map +1 -1
  196. package/dist/src/function-configs/geo/geoContainsPoint.js +11 -0
  197. package/dist/src/function-configs/geo/geoContainsPoint.js.map +1 -1
  198. package/dist/src/function-configs/geo/geoDisjoint.d.ts.map +1 -1
  199. package/dist/src/function-configs/geo/geoDisjoint.js +7 -0
  200. package/dist/src/function-configs/geo/geoDisjoint.js.map +1 -1
  201. package/dist/src/function-configs/geo/geoIntersects.d.ts.map +1 -1
  202. package/dist/src/function-configs/geo/geoIntersects.js +9 -0
  203. package/dist/src/function-configs/geo/geoIntersects.js.map +1 -1
  204. package/dist/src/function-configs/geo/geoPointWithinRange.d.ts.map +1 -1
  205. package/dist/src/function-configs/geo/geoPointWithinRange.js +28 -0
  206. package/dist/src/function-configs/geo/geoPointWithinRange.js.map +1 -1
  207. package/dist/src/function-configs/geo/geoRelation.d.ts.map +1 -1
  208. package/dist/src/function-configs/geo/geoRelation.js +13 -0
  209. package/dist/src/function-configs/geo/geoRelation.js.map +1 -1
  210. package/dist/src/function-configs/geo/geoWithin.d.ts.map +1 -1
  211. package/dist/src/function-configs/geo/geoWithin.js +7 -0
  212. package/dist/src/function-configs/geo/geoWithin.js.map +1 -1
  213. package/dist/src/function-configs/geo/inGeoBoundingBox.d.ts.map +1 -1
  214. package/dist/src/function-configs/geo/inGeoBoundingBox.js +24 -1
  215. package/dist/src/function-configs/geo/inGeoBoundingBox.js.map +1 -1
  216. package/dist/src/function-configs/geo/isGeoJSON.d.ts.map +1 -1
  217. package/dist/src/function-configs/geo/isGeoJSON.js +6 -0
  218. package/dist/src/function-configs/geo/isGeoJSON.js.map +1 -1
  219. package/dist/src/function-configs/geo/isGeoPoint.d.ts.map +1 -1
  220. package/dist/src/function-configs/geo/isGeoPoint.js +13 -0
  221. package/dist/src/function-configs/geo/isGeoPoint.js.map +1 -1
  222. package/dist/src/function-configs/geo/isGeoShapeMultiPolygon.d.ts.map +1 -1
  223. package/dist/src/function-configs/geo/isGeoShapeMultiPolygon.js +6 -0
  224. package/dist/src/function-configs/geo/isGeoShapeMultiPolygon.js.map +1 -1
  225. package/dist/src/function-configs/geo/isGeoShapePoint.d.ts.map +1 -1
  226. package/dist/src/function-configs/geo/isGeoShapePoint.js +6 -0
  227. package/dist/src/function-configs/geo/isGeoShapePoint.js.map +1 -1
  228. package/dist/src/function-configs/geo/isGeoShapePolygon.d.ts.map +1 -1
  229. package/dist/src/function-configs/geo/isGeoShapePolygon.js +6 -0
  230. package/dist/src/function-configs/geo/isGeoShapePolygon.js.map +1 -1
  231. package/dist/src/function-configs/geo/sql-utils.d.ts +116 -0
  232. package/dist/src/function-configs/geo/sql-utils.d.ts.map +1 -0
  233. package/dist/src/function-configs/geo/sql-utils.js +179 -0
  234. package/dist/src/function-configs/geo/sql-utils.js.map +1 -0
  235. package/dist/src/function-configs/interfaces.d.ts +102 -0
  236. package/dist/src/function-configs/interfaces.d.ts.map +1 -1
  237. package/dist/src/function-configs/interfaces.js.map +1 -1
  238. package/dist/src/function-configs/ip/extractMappedIPv4.d.ts.map +1 -1
  239. package/dist/src/function-configs/ip/extractMappedIPv4.js +11 -0
  240. package/dist/src/function-configs/ip/extractMappedIPv4.js.map +1 -1
  241. package/dist/src/function-configs/ip/getCIDRBroadcast.d.ts.map +1 -1
  242. package/dist/src/function-configs/ip/getCIDRBroadcast.js +7 -0
  243. package/dist/src/function-configs/ip/getCIDRBroadcast.js.map +1 -1
  244. package/dist/src/function-configs/ip/getCIDRMax.d.ts.map +1 -1
  245. package/dist/src/function-configs/ip/getCIDRMax.js +10 -0
  246. package/dist/src/function-configs/ip/getCIDRMax.js.map +1 -1
  247. package/dist/src/function-configs/ip/getCIDRMin.d.ts.map +1 -1
  248. package/dist/src/function-configs/ip/getCIDRMin.js +9 -0
  249. package/dist/src/function-configs/ip/getCIDRMin.js.map +1 -1
  250. package/dist/src/function-configs/ip/getCIDRNetwork.d.ts.map +1 -1
  251. package/dist/src/function-configs/ip/getCIDRNetwork.js +7 -0
  252. package/dist/src/function-configs/ip/getCIDRNetwork.js.map +1 -1
  253. package/dist/src/function-configs/ip/getFirstIpInCIDR.d.ts.map +1 -1
  254. package/dist/src/function-configs/ip/getFirstIpInCIDR.js +11 -0
  255. package/dist/src/function-configs/ip/getFirstIpInCIDR.js.map +1 -1
  256. package/dist/src/function-configs/ip/getFirstUsableIPInCIDR.d.ts.map +1 -1
  257. package/dist/src/function-configs/ip/getFirstUsableIPInCIDR.js +14 -0
  258. package/dist/src/function-configs/ip/getFirstUsableIPInCIDR.js.map +1 -1
  259. package/dist/src/function-configs/ip/getLastIpInCIDR.d.ts.map +1 -1
  260. package/dist/src/function-configs/ip/getLastIpInCIDR.js +8 -0
  261. package/dist/src/function-configs/ip/getLastIpInCIDR.js.map +1 -1
  262. package/dist/src/function-configs/ip/getLastUsableIPInCIDR.d.ts.map +1 -1
  263. package/dist/src/function-configs/ip/getLastUsableIPInCIDR.js +13 -0
  264. package/dist/src/function-configs/ip/getLastUsableIPInCIDR.js.map +1 -1
  265. package/dist/src/function-configs/ip/inIPRange.d.ts.map +1 -1
  266. package/dist/src/function-configs/ip/inIPRange.js +15 -0
  267. package/dist/src/function-configs/ip/inIPRange.js.map +1 -1
  268. package/dist/src/function-configs/ip/intToIP.d.ts.map +1 -1
  269. package/dist/src/function-configs/ip/intToIP.js +25 -0
  270. package/dist/src/function-configs/ip/intToIP.js.map +1 -1
  271. package/dist/src/function-configs/ip/ipToInt.d.ts.map +1 -1
  272. package/dist/src/function-configs/ip/ipToInt.js +12 -0
  273. package/dist/src/function-configs/ip/ipToInt.js.map +1 -1
  274. package/dist/src/function-configs/ip/isCIDR.d.ts.map +1 -1
  275. package/dist/src/function-configs/ip/isCIDR.js +8 -0
  276. package/dist/src/function-configs/ip/isCIDR.js.map +1 -1
  277. package/dist/src/function-configs/ip/isIP.d.ts.map +1 -1
  278. package/dist/src/function-configs/ip/isIP.js +10 -0
  279. package/dist/src/function-configs/ip/isIP.js.map +1 -1
  280. package/dist/src/function-configs/ip/isIPv4.d.ts.map +1 -1
  281. package/dist/src/function-configs/ip/isIPv4.js +9 -0
  282. package/dist/src/function-configs/ip/isIPv4.js.map +1 -1
  283. package/dist/src/function-configs/ip/isIPv6.d.ts.map +1 -1
  284. package/dist/src/function-configs/ip/isIPv6.js +10 -0
  285. package/dist/src/function-configs/ip/isIPv6.js.map +1 -1
  286. package/dist/src/function-configs/ip/isMappedIPv4.d.ts.map +1 -1
  287. package/dist/src/function-configs/ip/isMappedIPv4.js +10 -0
  288. package/dist/src/function-configs/ip/isMappedIPv4.js.map +1 -1
  289. package/dist/src/function-configs/ip/isNonRoutableIP.d.ts.map +1 -1
  290. package/dist/src/function-configs/ip/isNonRoutableIP.js +8 -0
  291. package/dist/src/function-configs/ip/isNonRoutableIP.js.map +1 -1
  292. package/dist/src/function-configs/ip/isRoutableIP.d.ts.map +1 -1
  293. package/dist/src/function-configs/ip/isRoutableIP.js +12 -0
  294. package/dist/src/function-configs/ip/isRoutableIP.js.map +1 -1
  295. package/dist/src/function-configs/ip/reverseIP.d.ts.map +1 -1
  296. package/dist/src/function-configs/ip/reverseIP.js +13 -0
  297. package/dist/src/function-configs/ip/reverseIP.js.map +1 -1
  298. package/dist/src/function-configs/ip/sql-utils.d.ts +116 -0
  299. package/dist/src/function-configs/ip/sql-utils.d.ts.map +1 -0
  300. package/dist/src/function-configs/ip/sql-utils.js +187 -0
  301. package/dist/src/function-configs/ip/sql-utils.js.map +1 -0
  302. package/dist/src/function-configs/ip/toCIDR.d.ts.map +1 -1
  303. package/dist/src/function-configs/ip/toCIDR.js +19 -0
  304. package/dist/src/function-configs/ip/toCIDR.js.map +1 -1
  305. package/dist/src/function-configs/json/setDefault.d.ts.map +1 -1
  306. package/dist/src/function-configs/json/setDefault.js +17 -0
  307. package/dist/src/function-configs/json/setDefault.js.map +1 -1
  308. package/dist/src/function-configs/json/sql-utils.d.ts +20 -0
  309. package/dist/src/function-configs/json/sql-utils.d.ts.map +1 -0
  310. package/dist/src/function-configs/json/sql-utils.js +26 -0
  311. package/dist/src/function-configs/json/sql-utils.js.map +1 -0
  312. package/dist/src/function-configs/json/toJSON.d.ts.map +1 -1
  313. package/dist/src/function-configs/json/toJSON.js +13 -0
  314. package/dist/src/function-configs/json/toJSON.js.map +1 -1
  315. package/dist/src/function-configs/numeric/abs.d.ts.map +1 -1
  316. package/dist/src/function-configs/numeric/abs.js +5 -0
  317. package/dist/src/function-configs/numeric/abs.js.map +1 -1
  318. package/dist/src/function-configs/numeric/acos.d.ts.map +1 -1
  319. package/dist/src/function-configs/numeric/acos.js +12 -0
  320. package/dist/src/function-configs/numeric/acos.js.map +1 -1
  321. package/dist/src/function-configs/numeric/acosh.d.ts.map +1 -1
  322. package/dist/src/function-configs/numeric/acosh.js +12 -0
  323. package/dist/src/function-configs/numeric/acosh.js.map +1 -1
  324. package/dist/src/function-configs/numeric/add.d.ts.map +1 -1
  325. package/dist/src/function-configs/numeric/add.js +12 -0
  326. package/dist/src/function-configs/numeric/add.js.map +1 -1
  327. package/dist/src/function-configs/numeric/addValues.d.ts.map +1 -1
  328. package/dist/src/function-configs/numeric/addValues.js +9 -0
  329. package/dist/src/function-configs/numeric/addValues.js.map +1 -1
  330. package/dist/src/function-configs/numeric/asin.d.ts.map +1 -1
  331. package/dist/src/function-configs/numeric/asin.js +12 -0
  332. package/dist/src/function-configs/numeric/asin.js.map +1 -1
  333. package/dist/src/function-configs/numeric/asinh.d.ts.map +1 -1
  334. package/dist/src/function-configs/numeric/asinh.js +8 -0
  335. package/dist/src/function-configs/numeric/asinh.js.map +1 -1
  336. package/dist/src/function-configs/numeric/atan.d.ts.map +1 -1
  337. package/dist/src/function-configs/numeric/atan.js +8 -0
  338. package/dist/src/function-configs/numeric/atan.js.map +1 -1
  339. package/dist/src/function-configs/numeric/atan2.d.ts.map +1 -1
  340. package/dist/src/function-configs/numeric/atan2.js +16 -0
  341. package/dist/src/function-configs/numeric/atan2.js.map +1 -1
  342. package/dist/src/function-configs/numeric/atanh.d.ts.map +1 -1
  343. package/dist/src/function-configs/numeric/atanh.js +13 -0
  344. package/dist/src/function-configs/numeric/atanh.js.map +1 -1
  345. package/dist/src/function-configs/numeric/cbrt.d.ts.map +1 -1
  346. package/dist/src/function-configs/numeric/cbrt.js +8 -0
  347. package/dist/src/function-configs/numeric/cbrt.js.map +1 -1
  348. package/dist/src/function-configs/numeric/ceil.d.ts.map +1 -1
  349. package/dist/src/function-configs/numeric/ceil.js +13 -0
  350. package/dist/src/function-configs/numeric/ceil.js.map +1 -1
  351. package/dist/src/function-configs/numeric/clz32.d.ts.map +1 -1
  352. package/dist/src/function-configs/numeric/clz32.js +16 -0
  353. package/dist/src/function-configs/numeric/clz32.js.map +1 -1
  354. package/dist/src/function-configs/numeric/cos.d.ts.map +1 -1
  355. package/dist/src/function-configs/numeric/cos.js +8 -0
  356. package/dist/src/function-configs/numeric/cos.js.map +1 -1
  357. package/dist/src/function-configs/numeric/cosh.d.ts.map +1 -1
  358. package/dist/src/function-configs/numeric/cosh.js +8 -0
  359. package/dist/src/function-configs/numeric/cosh.js.map +1 -1
  360. package/dist/src/function-configs/numeric/divide.d.ts.map +1 -1
  361. package/dist/src/function-configs/numeric/divide.js +12 -0
  362. package/dist/src/function-configs/numeric/divide.js.map +1 -1
  363. package/dist/src/function-configs/numeric/divideValues.d.ts.map +1 -1
  364. package/dist/src/function-configs/numeric/divideValues.js +6 -0
  365. package/dist/src/function-configs/numeric/divideValues.js.map +1 -1
  366. package/dist/src/function-configs/numeric/exp.d.ts.map +1 -1
  367. package/dist/src/function-configs/numeric/exp.js +8 -0
  368. package/dist/src/function-configs/numeric/exp.js.map +1 -1
  369. package/dist/src/function-configs/numeric/floor.d.ts.map +1 -1
  370. package/dist/src/function-configs/numeric/floor.js +13 -0
  371. package/dist/src/function-configs/numeric/floor.js.map +1 -1
  372. package/dist/src/function-configs/numeric/fround.d.ts.map +1 -1
  373. package/dist/src/function-configs/numeric/fround.js +5 -0
  374. package/dist/src/function-configs/numeric/fround.js.map +1 -1
  375. package/dist/src/function-configs/numeric/hypot.d.ts.map +1 -1
  376. package/dist/src/function-configs/numeric/hypot.js +14 -0
  377. package/dist/src/function-configs/numeric/hypot.js.map +1 -1
  378. package/dist/src/function-configs/numeric/inNumberRange.d.ts.map +1 -1
  379. package/dist/src/function-configs/numeric/inNumberRange.js +20 -0
  380. package/dist/src/function-configs/numeric/inNumberRange.js.map +1 -1
  381. package/dist/src/function-configs/numeric/isEven.d.ts.map +1 -1
  382. package/dist/src/function-configs/numeric/isEven.js +4 -0
  383. package/dist/src/function-configs/numeric/isEven.js.map +1 -1
  384. package/dist/src/function-configs/numeric/isGreaterThan.d.ts.map +1 -1
  385. package/dist/src/function-configs/numeric/isGreaterThan.js +6 -0
  386. package/dist/src/function-configs/numeric/isGreaterThan.js.map +1 -1
  387. package/dist/src/function-configs/numeric/isGreaterThanOrEqualTo.d.ts.map +1 -1
  388. package/dist/src/function-configs/numeric/isGreaterThanOrEqualTo.js +6 -0
  389. package/dist/src/function-configs/numeric/isGreaterThanOrEqualTo.js.map +1 -1
  390. package/dist/src/function-configs/numeric/isLessThan.d.ts.map +1 -1
  391. package/dist/src/function-configs/numeric/isLessThan.js +6 -0
  392. package/dist/src/function-configs/numeric/isLessThan.js.map +1 -1
  393. package/dist/src/function-configs/numeric/isLessThanOrEqualTo.d.ts.map +1 -1
  394. package/dist/src/function-configs/numeric/isLessThanOrEqualTo.js +6 -0
  395. package/dist/src/function-configs/numeric/isLessThanOrEqualTo.js.map +1 -1
  396. package/dist/src/function-configs/numeric/isOdd.d.ts.map +1 -1
  397. package/dist/src/function-configs/numeric/isOdd.js +9 -0
  398. package/dist/src/function-configs/numeric/isOdd.js.map +1 -1
  399. package/dist/src/function-configs/numeric/log.d.ts.map +1 -1
  400. package/dist/src/function-configs/numeric/log.js +13 -0
  401. package/dist/src/function-configs/numeric/log.js.map +1 -1
  402. package/dist/src/function-configs/numeric/log10.d.ts.map +1 -1
  403. package/dist/src/function-configs/numeric/log10.js +13 -0
  404. package/dist/src/function-configs/numeric/log10.js.map +1 -1
  405. package/dist/src/function-configs/numeric/log2.d.ts.map +1 -1
  406. package/dist/src/function-configs/numeric/log2.js +13 -0
  407. package/dist/src/function-configs/numeric/log2.js.map +1 -1
  408. package/dist/src/function-configs/numeric/maxValues.d.ts.map +1 -1
  409. package/dist/src/function-configs/numeric/maxValues.js +6 -0
  410. package/dist/src/function-configs/numeric/maxValues.js.map +1 -1
  411. package/dist/src/function-configs/numeric/minValues.d.ts.map +1 -1
  412. package/dist/src/function-configs/numeric/minValues.js +6 -0
  413. package/dist/src/function-configs/numeric/minValues.js.map +1 -1
  414. package/dist/src/function-configs/numeric/modulus.d.ts.map +1 -1
  415. package/dist/src/function-configs/numeric/modulus.js +9 -0
  416. package/dist/src/function-configs/numeric/modulus.js.map +1 -1
  417. package/dist/src/function-configs/numeric/multiply.d.ts.map +1 -1
  418. package/dist/src/function-configs/numeric/multiply.js +12 -0
  419. package/dist/src/function-configs/numeric/multiply.js.map +1 -1
  420. package/dist/src/function-configs/numeric/multiplyValues.d.ts.map +1 -1
  421. package/dist/src/function-configs/numeric/multiplyValues.js +6 -0
  422. package/dist/src/function-configs/numeric/multiplyValues.js.map +1 -1
  423. package/dist/src/function-configs/numeric/pow.d.ts.map +1 -1
  424. package/dist/src/function-configs/numeric/pow.js +7 -0
  425. package/dist/src/function-configs/numeric/pow.js.map +1 -1
  426. package/dist/src/function-configs/numeric/round.d.ts.map +1 -1
  427. package/dist/src/function-configs/numeric/round.js +13 -0
  428. package/dist/src/function-configs/numeric/round.js.map +1 -1
  429. package/dist/src/function-configs/numeric/setPrecision.d.ts.map +1 -1
  430. package/dist/src/function-configs/numeric/setPrecision.js +26 -0
  431. package/dist/src/function-configs/numeric/setPrecision.js.map +1 -1
  432. package/dist/src/function-configs/numeric/sign.d.ts.map +1 -1
  433. package/dist/src/function-configs/numeric/sign.js +5 -0
  434. package/dist/src/function-configs/numeric/sign.js.map +1 -1
  435. package/dist/src/function-configs/numeric/sin.d.ts.map +1 -1
  436. package/dist/src/function-configs/numeric/sin.js +8 -0
  437. package/dist/src/function-configs/numeric/sin.js.map +1 -1
  438. package/dist/src/function-configs/numeric/sinh.d.ts.map +1 -1
  439. package/dist/src/function-configs/numeric/sinh.js +8 -0
  440. package/dist/src/function-configs/numeric/sinh.js.map +1 -1
  441. package/dist/src/function-configs/numeric/sql-utils.d.ts +54 -0
  442. package/dist/src/function-configs/numeric/sql-utils.d.ts.map +1 -0
  443. package/dist/src/function-configs/numeric/sql-utils.js +76 -0
  444. package/dist/src/function-configs/numeric/sql-utils.js.map +1 -0
  445. package/dist/src/function-configs/numeric/sqrt.d.ts.map +1 -1
  446. package/dist/src/function-configs/numeric/sqrt.js +10 -0
  447. package/dist/src/function-configs/numeric/sqrt.js.map +1 -1
  448. package/dist/src/function-configs/numeric/subtract.d.ts.map +1 -1
  449. package/dist/src/function-configs/numeric/subtract.js +12 -0
  450. package/dist/src/function-configs/numeric/subtract.js.map +1 -1
  451. package/dist/src/function-configs/numeric/subtractValues.d.ts.map +1 -1
  452. package/dist/src/function-configs/numeric/subtractValues.js +9 -0
  453. package/dist/src/function-configs/numeric/subtractValues.js.map +1 -1
  454. package/dist/src/function-configs/numeric/tan.d.ts.map +1 -1
  455. package/dist/src/function-configs/numeric/tan.js +8 -0
  456. package/dist/src/function-configs/numeric/tan.js.map +1 -1
  457. package/dist/src/function-configs/numeric/tanh.d.ts.map +1 -1
  458. package/dist/src/function-configs/numeric/tanh.js +8 -0
  459. package/dist/src/function-configs/numeric/tanh.js.map +1 -1
  460. package/dist/src/function-configs/numeric/toCelsius.d.ts.map +1 -1
  461. package/dist/src/function-configs/numeric/toCelsius.js +14 -0
  462. package/dist/src/function-configs/numeric/toCelsius.js.map +1 -1
  463. package/dist/src/function-configs/numeric/toFahrenheit.d.ts.map +1 -1
  464. package/dist/src/function-configs/numeric/toFahrenheit.js +14 -0
  465. package/dist/src/function-configs/numeric/toFahrenheit.js.map +1 -1
  466. package/dist/src/function-configs/numeric/toNumber.d.ts.map +1 -1
  467. package/dist/src/function-configs/numeric/toNumber.js +42 -0
  468. package/dist/src/function-configs/numeric/toNumber.js.map +1 -1
  469. package/dist/src/function-configs/object/equals.d.ts.map +1 -1
  470. package/dist/src/function-configs/object/equals.js +14 -0
  471. package/dist/src/function-configs/object/equals.js.map +1 -1
  472. package/dist/src/function-configs/object/isEmpty.d.ts.map +1 -1
  473. package/dist/src/function-configs/object/isEmpty.js +26 -0
  474. package/dist/src/function-configs/object/isEmpty.js.map +1 -1
  475. package/dist/src/function-configs/object/lookup.d.ts.map +1 -1
  476. package/dist/src/function-configs/object/lookup.js +8 -0
  477. package/dist/src/function-configs/object/lookup.js.map +1 -1
  478. package/dist/src/function-configs/object/sql-utils.d.ts +5 -0
  479. package/dist/src/function-configs/object/sql-utils.d.ts.map +1 -0
  480. package/dist/src/function-configs/object/sql-utils.js +96 -0
  481. package/dist/src/function-configs/object/sql-utils.js.map +1 -0
  482. package/dist/src/function-configs/sql-helpers.d.ts +115 -0
  483. package/dist/src/function-configs/sql-helpers.d.ts.map +1 -0
  484. package/dist/src/function-configs/sql-helpers.js +169 -0
  485. package/dist/src/function-configs/sql-helpers.js.map +1 -0
  486. package/dist/src/function-configs/string/contains.d.ts.map +1 -1
  487. package/dist/src/function-configs/string/contains.js +5 -0
  488. package/dist/src/function-configs/string/contains.js.map +1 -1
  489. package/dist/src/function-configs/string/createID.d.ts.map +1 -1
  490. package/dist/src/function-configs/string/createID.js +16 -0
  491. package/dist/src/function-configs/string/createID.js.map +1 -1
  492. package/dist/src/function-configs/string/decodeBase64.d.ts.map +1 -1
  493. package/dist/src/function-configs/string/decodeBase64.js +14 -0
  494. package/dist/src/function-configs/string/decodeBase64.js.map +1 -1
  495. package/dist/src/function-configs/string/decodeHex.d.ts.map +1 -1
  496. package/dist/src/function-configs/string/decodeHex.js +13 -0
  497. package/dist/src/function-configs/string/decodeHex.js.map +1 -1
  498. package/dist/src/function-configs/string/decodeURL.d.ts.map +1 -1
  499. package/dist/src/function-configs/string/decodeURL.js +7 -0
  500. package/dist/src/function-configs/string/decodeURL.js.map +1 -1
  501. package/dist/src/function-configs/string/encode.d.ts.map +1 -1
  502. package/dist/src/function-configs/string/encode.js +14 -0
  503. package/dist/src/function-configs/string/encode.js.map +1 -1
  504. package/dist/src/function-configs/string/encodeBase64.d.ts.map +1 -1
  505. package/dist/src/function-configs/string/encodeBase64.js +10 -0
  506. package/dist/src/function-configs/string/encodeBase64.js.map +1 -1
  507. package/dist/src/function-configs/string/encodeHex.d.ts.map +1 -1
  508. package/dist/src/function-configs/string/encodeHex.js +9 -0
  509. package/dist/src/function-configs/string/encodeHex.js.map +1 -1
  510. package/dist/src/function-configs/string/encodeSHA.d.ts.map +1 -1
  511. package/dist/src/function-configs/string/encodeSHA.js +11 -0
  512. package/dist/src/function-configs/string/encodeSHA.js.map +1 -1
  513. package/dist/src/function-configs/string/encodeSHA1.d.ts.map +1 -1
  514. package/dist/src/function-configs/string/encodeSHA1.js +10 -0
  515. package/dist/src/function-configs/string/encodeSHA1.js.map +1 -1
  516. package/dist/src/function-configs/string/encodeURL.d.ts.map +1 -1
  517. package/dist/src/function-configs/string/encodeURL.js +7 -0
  518. package/dist/src/function-configs/string/encodeURL.js.map +1 -1
  519. package/dist/src/function-configs/string/endsWith.d.ts.map +1 -1
  520. package/dist/src/function-configs/string/endsWith.js +5 -0
  521. package/dist/src/function-configs/string/endsWith.js.map +1 -1
  522. package/dist/src/function-configs/string/entropy.d.ts.map +1 -1
  523. package/dist/src/function-configs/string/entropy.js +17 -0
  524. package/dist/src/function-configs/string/entropy.js.map +1 -1
  525. package/dist/src/function-configs/string/extract.d.ts.map +1 -1
  526. package/dist/src/function-configs/string/extract.js +48 -1
  527. package/dist/src/function-configs/string/extract.js.map +1 -1
  528. package/dist/src/function-configs/string/isAlpha.d.ts.map +1 -1
  529. package/dist/src/function-configs/string/isAlpha.js +10 -0
  530. package/dist/src/function-configs/string/isAlpha.js.map +1 -1
  531. package/dist/src/function-configs/string/isAlphaNumeric.d.ts.map +1 -1
  532. package/dist/src/function-configs/string/isAlphaNumeric.js +6 -0
  533. package/dist/src/function-configs/string/isAlphaNumeric.js.map +1 -1
  534. package/dist/src/function-configs/string/isBase64.d.ts.map +1 -1
  535. package/dist/src/function-configs/string/isBase64.js +13 -0
  536. package/dist/src/function-configs/string/isBase64.js.map +1 -1
  537. package/dist/src/function-configs/string/isCountryCode.d.ts.map +1 -1
  538. package/dist/src/function-configs/string/isCountryCode.js +16 -0
  539. package/dist/src/function-configs/string/isCountryCode.js.map +1 -1
  540. package/dist/src/function-configs/string/isEmail.d.ts.map +1 -1
  541. package/dist/src/function-configs/string/isEmail.js +10 -0
  542. package/dist/src/function-configs/string/isEmail.js.map +1 -1
  543. package/dist/src/function-configs/string/isFQDN.d.ts.map +1 -1
  544. package/dist/src/function-configs/string/isFQDN.js +9 -0
  545. package/dist/src/function-configs/string/isFQDN.js.map +1 -1
  546. package/dist/src/function-configs/string/isHash.d.ts.map +1 -1
  547. package/dist/src/function-configs/string/isHash.js +9 -0
  548. package/dist/src/function-configs/string/isHash.js.map +1 -1
  549. package/dist/src/function-configs/string/isLength.d.ts.map +1 -1
  550. package/dist/src/function-configs/string/isLength.js +23 -0
  551. package/dist/src/function-configs/string/isLength.js.map +1 -1
  552. package/dist/src/function-configs/string/isMACAddress.d.ts.map +1 -1
  553. package/dist/src/function-configs/string/isMACAddress.js +17 -0
  554. package/dist/src/function-configs/string/isMACAddress.js.map +1 -1
  555. package/dist/src/function-configs/string/isMIMEType.d.ts.map +1 -1
  556. package/dist/src/function-configs/string/isMIMEType.js +10 -0
  557. package/dist/src/function-configs/string/isMIMEType.js.map +1 -1
  558. package/dist/src/function-configs/string/isPhoneNumberLike.d.ts.map +1 -1
  559. package/dist/src/function-configs/string/isPhoneNumberLike.js +14 -0
  560. package/dist/src/function-configs/string/isPhoneNumberLike.js.map +1 -1
  561. package/dist/src/function-configs/string/isPort.d.ts.map +1 -1
  562. package/dist/src/function-configs/string/isPort.js +12 -0
  563. package/dist/src/function-configs/string/isPort.js.map +1 -1
  564. package/dist/src/function-configs/string/isPostalCode.d.ts.map +1 -1
  565. package/dist/src/function-configs/string/isPostalCode.js +12 -0
  566. package/dist/src/function-configs/string/isPostalCode.js.map +1 -1
  567. package/dist/src/function-configs/string/isString.d.ts.map +1 -1
  568. package/dist/src/function-configs/string/isString.js +7 -0
  569. package/dist/src/function-configs/string/isString.js.map +1 -1
  570. package/dist/src/function-configs/string/isUUID.d.ts.map +1 -1
  571. package/dist/src/function-configs/string/isUUID.js +9 -0
  572. package/dist/src/function-configs/string/isUUID.js.map +1 -1
  573. package/dist/src/function-configs/string/join.d.ts.map +1 -1
  574. package/dist/src/function-configs/string/join.js +17 -0
  575. package/dist/src/function-configs/string/join.js.map +1 -1
  576. package/dist/src/function-configs/string/postal-code-utils.d.ts +13 -0
  577. package/dist/src/function-configs/string/postal-code-utils.d.ts.map +1 -0
  578. package/dist/src/function-configs/string/postal-code-utils.js +160 -0
  579. package/dist/src/function-configs/string/postal-code-utils.js.map +1 -0
  580. package/dist/src/function-configs/string/replaceLiteral.d.ts.map +1 -1
  581. package/dist/src/function-configs/string/replaceLiteral.js +22 -0
  582. package/dist/src/function-configs/string/replaceLiteral.js.map +1 -1
  583. package/dist/src/function-configs/string/replaceRegex.d.ts.map +1 -1
  584. package/dist/src/function-configs/string/replaceRegex.js +34 -0
  585. package/dist/src/function-configs/string/replaceRegex.js.map +1 -1
  586. package/dist/src/function-configs/string/reverse.d.ts.map +1 -1
  587. package/dist/src/function-configs/string/reverse.js +16 -0
  588. package/dist/src/function-configs/string/reverse.js.map +1 -1
  589. package/dist/src/function-configs/string/split.d.ts.map +1 -1
  590. package/dist/src/function-configs/string/split.js +13 -0
  591. package/dist/src/function-configs/string/split.js.map +1 -1
  592. package/dist/src/function-configs/string/sql-regex-utils.d.ts +91 -0
  593. package/dist/src/function-configs/string/sql-regex-utils.d.ts.map +1 -0
  594. package/dist/src/function-configs/string/sql-regex-utils.js +123 -0
  595. package/dist/src/function-configs/string/sql-regex-utils.js.map +1 -0
  596. package/dist/src/function-configs/string/sql-utils.d.ts +191 -0
  597. package/dist/src/function-configs/string/sql-utils.d.ts.map +1 -0
  598. package/dist/src/function-configs/string/sql-utils.js +321 -0
  599. package/dist/src/function-configs/string/sql-utils.js.map +1 -0
  600. package/dist/src/function-configs/string/sql-validator-utils.d.ts +49 -0
  601. package/dist/src/function-configs/string/sql-validator-utils.d.ts.map +1 -0
  602. package/dist/src/function-configs/string/sql-validator-utils.js +327 -0
  603. package/dist/src/function-configs/string/sql-validator-utils.js.map +1 -0
  604. package/dist/src/function-configs/string/startsWith.d.ts.map +1 -1
  605. package/dist/src/function-configs/string/startsWith.js +5 -0
  606. package/dist/src/function-configs/string/startsWith.js.map +1 -1
  607. package/dist/src/function-configs/string/toCamelCase.d.ts.map +1 -1
  608. package/dist/src/function-configs/string/toCamelCase.js +18 -0
  609. package/dist/src/function-configs/string/toCamelCase.js.map +1 -1
  610. package/dist/src/function-configs/string/toKebabCase.d.ts.map +1 -1
  611. package/dist/src/function-configs/string/toKebabCase.js +18 -0
  612. package/dist/src/function-configs/string/toKebabCase.js.map +1 -1
  613. package/dist/src/function-configs/string/toLowerCase.d.ts.map +1 -1
  614. package/dist/src/function-configs/string/toLowerCase.js +13 -0
  615. package/dist/src/function-configs/string/toLowerCase.js.map +1 -1
  616. package/dist/src/function-configs/string/toPascalCase.d.ts.map +1 -1
  617. package/dist/src/function-configs/string/toPascalCase.js +18 -0
  618. package/dist/src/function-configs/string/toPascalCase.js.map +1 -1
  619. package/dist/src/function-configs/string/toSnakeCase.d.ts.map +1 -1
  620. package/dist/src/function-configs/string/toSnakeCase.js +18 -0
  621. package/dist/src/function-configs/string/toSnakeCase.js.map +1 -1
  622. package/dist/src/function-configs/string/toString.d.ts.map +1 -1
  623. package/dist/src/function-configs/string/toString.js +42 -0
  624. package/dist/src/function-configs/string/toString.js.map +1 -1
  625. package/dist/src/function-configs/string/toTitleCase.d.ts.map +1 -1
  626. package/dist/src/function-configs/string/toTitleCase.js +19 -0
  627. package/dist/src/function-configs/string/toTitleCase.js.map +1 -1
  628. package/dist/src/function-configs/string/toUpperCase.d.ts.map +1 -1
  629. package/dist/src/function-configs/string/toUpperCase.js +13 -0
  630. package/dist/src/function-configs/string/toUpperCase.js.map +1 -1
  631. package/dist/src/function-configs/string/trim.d.ts.map +1 -1
  632. package/dist/src/function-configs/string/trim.js +11 -0
  633. package/dist/src/function-configs/string/trim.js.map +1 -1
  634. package/dist/src/function-configs/string/trimEnd.d.ts.map +1 -1
  635. package/dist/src/function-configs/string/trimEnd.js +11 -0
  636. package/dist/src/function-configs/string/trimEnd.js.map +1 -1
  637. package/dist/src/function-configs/string/trimStart.d.ts.map +1 -1
  638. package/dist/src/function-configs/string/trimStart.js +11 -0
  639. package/dist/src/function-configs/string/trimStart.js.map +1 -1
  640. package/dist/src/function-configs/string/truncate.d.ts.map +1 -1
  641. package/dist/src/function-configs/string/truncate.js +15 -0
  642. package/dist/src/function-configs/string/truncate.js.map +1 -1
  643. package/dist/src/index.d.ts +1 -0
  644. package/dist/src/index.d.ts.map +1 -1
  645. package/dist/src/index.js +1 -0
  646. package/dist/src/index.js.map +1 -1
  647. package/dist/src/teal-frame/DuckContext.d.ts +105 -0
  648. package/dist/src/teal-frame/DuckContext.d.ts.map +1 -0
  649. package/dist/src/teal-frame/DuckContext.js +244 -0
  650. package/dist/src/teal-frame/DuckContext.js.map +1 -0
  651. package/dist/src/teal-frame/TealFrame.d.ts +371 -0
  652. package/dist/src/teal-frame/TealFrame.d.ts.map +1 -0
  653. package/dist/src/teal-frame/TealFrame.js +575 -0
  654. package/dist/src/teal-frame/TealFrame.js.map +1 -0
  655. package/dist/src/teal-frame/append.d.ts +45 -0
  656. package/dist/src/teal-frame/append.d.ts.map +1 -0
  657. package/dist/src/teal-frame/append.js +136 -0
  658. package/dist/src/teal-frame/append.js.map +1 -0
  659. package/dist/src/teal-frame/clauses.d.ts +22 -0
  660. package/dist/src/teal-frame/clauses.d.ts.map +1 -0
  661. package/dist/src/teal-frame/clauses.js +41 -0
  662. package/dist/src/teal-frame/clauses.js.map +1 -0
  663. package/dist/src/teal-frame/database.d.ts +46 -0
  664. package/dist/src/teal-frame/database.d.ts.map +1 -0
  665. package/dist/src/teal-frame/database.js +91 -0
  666. package/dist/src/teal-frame/database.js.map +1 -0
  667. package/dist/src/teal-frame/date-value.d.ts +55 -0
  668. package/dist/src/teal-frame/date-value.d.ts.map +1 -0
  669. package/dist/src/teal-frame/date-value.js +106 -0
  670. package/dist/src/teal-frame/date-value.js.map +1 -0
  671. package/dist/src/teal-frame/deep-select.d.ts +8 -0
  672. package/dist/src/teal-frame/deep-select.d.ts.map +1 -0
  673. package/dist/src/teal-frame/deep-select.js +125 -0
  674. package/dist/src/teal-frame/deep-select.js.map +1 -0
  675. package/dist/src/teal-frame/duck-values.d.ts +37 -0
  676. package/dist/src/teal-frame/duck-values.d.ts.map +1 -0
  677. package/dist/src/teal-frame/duck-values.js +173 -0
  678. package/dist/src/teal-frame/duck-values.js.map +1 -0
  679. package/dist/src/teal-frame/errors.d.ts +38 -0
  680. package/dist/src/teal-frame/errors.d.ts.map +1 -0
  681. package/dist/src/teal-frame/errors.js +63 -0
  682. package/dist/src/teal-frame/errors.js.map +1 -0
  683. package/dist/src/teal-frame/expand-values.d.ts +29 -0
  684. package/dist/src/teal-frame/expand-values.d.ts.map +1 -0
  685. package/dist/src/teal-frame/expand-values.js +53 -0
  686. package/dist/src/teal-frame/expand-values.js.map +1 -0
  687. package/dist/src/teal-frame/export-json.d.ts +58 -0
  688. package/dist/src/teal-frame/export-json.d.ts.map +1 -0
  689. package/dist/src/teal-frame/export-json.js +409 -0
  690. package/dist/src/teal-frame/export-json.js.map +1 -0
  691. package/dist/src/teal-frame/extension-tools.d.ts +40 -0
  692. package/dist/src/teal-frame/extension-tools.d.ts.map +1 -0
  693. package/dist/src/teal-frame/extension-tools.js +115 -0
  694. package/dist/src/teal-frame/extension-tools.js.map +1 -0
  695. package/dist/src/teal-frame/extensions-cli.d.ts +2 -0
  696. package/dist/src/teal-frame/extensions-cli.d.ts.map +1 -0
  697. package/dist/src/teal-frame/extensions-cli.js +56 -0
  698. package/dist/src/teal-frame/extensions-cli.js.map +1 -0
  699. package/dist/src/teal-frame/extensions.d.ts +53 -0
  700. package/dist/src/teal-frame/extensions.d.ts.map +1 -0
  701. package/dist/src/teal-frame/extensions.js +110 -0
  702. package/dist/src/teal-frame/extensions.js.map +1 -0
  703. package/dist/src/teal-frame/index.d.ts +23 -0
  704. package/dist/src/teal-frame/index.d.ts.map +1 -0
  705. package/dist/src/teal-frame/index.js +23 -0
  706. package/dist/src/teal-frame/index.js.map +1 -0
  707. package/dist/src/teal-frame/interfaces.d.ts +186 -0
  708. package/dist/src/teal-frame/interfaces.d.ts.map +1 -0
  709. package/dist/src/teal-frame/interfaces.js +2 -0
  710. package/dist/src/teal-frame/interfaces.js.map +1 -0
  711. package/dist/src/teal-frame/line-stream.d.ts +10 -0
  712. package/dist/src/teal-frame/line-stream.d.ts.map +1 -0
  713. package/dist/src/teal-frame/line-stream.js +35 -0
  714. package/dist/src/teal-frame/line-stream.js.map +1 -0
  715. package/dist/src/teal-frame/order-safety.d.ts +15 -0
  716. package/dist/src/teal-frame/order-safety.d.ts.map +1 -0
  717. package/dist/src/teal-frame/order-safety.js +21 -0
  718. package/dist/src/teal-frame/order-safety.js.map +1 -0
  719. package/dist/src/teal-frame/output.d.ts +18 -0
  720. package/dist/src/teal-frame/output.d.ts.map +1 -0
  721. package/dist/src/teal-frame/output.js +63 -0
  722. package/dist/src/teal-frame/output.js.map +1 -0
  723. package/dist/src/teal-frame/parquet-columns.d.ts +15 -0
  724. package/dist/src/teal-frame/parquet-columns.d.ts.map +1 -0
  725. package/dist/src/teal-frame/parquet-columns.js +45 -0
  726. package/dist/src/teal-frame/parquet-columns.js.map +1 -0
  727. package/dist/src/teal-frame/plain-values.d.ts +30 -0
  728. package/dist/src/teal-frame/plain-values.d.ts.map +1 -0
  729. package/dist/src/teal-frame/plain-values.js +69 -0
  730. package/dist/src/teal-frame/plain-values.js.map +1 -0
  731. package/dist/src/teal-frame/row-shape.d.ts +21 -0
  732. package/dist/src/teal-frame/row-shape.d.ts.map +1 -0
  733. package/dist/src/teal-frame/row-shape.js +94 -0
  734. package/dist/src/teal-frame/row-shape.js.map +1 -0
  735. package/dist/src/teal-frame/scalar-function.d.ts +66 -0
  736. package/dist/src/teal-frame/scalar-function.d.ts.map +1 -0
  737. package/dist/src/teal-frame/scalar-function.js +75 -0
  738. package/dist/src/teal-frame/scalar-function.js.map +1 -0
  739. package/dist/src/teal-frame/schema-check.d.ts +43 -0
  740. package/dist/src/teal-frame/schema-check.d.ts.map +1 -0
  741. package/dist/src/teal-frame/schema-check.js +66 -0
  742. package/dist/src/teal-frame/schema-check.js.map +1 -0
  743. package/dist/src/teal-frame/sources.d.ts +14 -0
  744. package/dist/src/teal-frame/sources.d.ts.map +1 -0
  745. package/dist/src/teal-frame/sources.js +28 -0
  746. package/dist/src/teal-frame/sources.js.map +1 -0
  747. package/dist/src/teal-frame/table.d.ts +19 -0
  748. package/dist/src/teal-frame/table.d.ts.map +1 -0
  749. package/dist/src/teal-frame/table.js +64 -0
  750. package/dist/src/teal-frame/table.js.map +1 -0
  751. package/dist/src/teal-frame/udf-types.d.ts +45 -0
  752. package/dist/src/teal-frame/udf-types.d.ts.map +1 -0
  753. package/dist/src/teal-frame/udf-types.js +157 -0
  754. package/dist/src/teal-frame/udf-types.js.map +1 -0
  755. package/dist/src/teal-frame/wkb.d.ts +6 -0
  756. package/dist/src/teal-frame/wkb.d.ts.map +1 -0
  757. package/dist/src/teal-frame/wkb.js +167 -0
  758. package/dist/src/teal-frame/wkb.js.map +1 -0
  759. package/package.json +16 -9
@@ -0,0 +1,116 @@
1
+ /**
2
+ * SQL forms of the IP functions, shared by the function configs in this directory.
3
+ *
4
+ * These need the `inet` extension, which is not statically linked into `@duckdb/node-api`. It
5
+ * autoloads on first use by downloading from the DuckDB repository, so a host with no network
6
+ * access and no installed copy gets a query error. `TealFrame` loads it when it opens.
7
+ *
8
+ * `test/teal-frame/sql-emission-spec.ts` checks each expression against `@terascope/ip-utils`.
9
+ * Where the two would disagree, the guard that handles it says so.
10
+ */
11
+ /** The value as an `INET`, or null. Any scope ID is stripped first. */
12
+ export declare function asInet(value: string): string;
13
+ /**
14
+ * Dotted-quad IPv4, matched by regex rather than `TRY_CAST`.
15
+ *
16
+ * `INET` accepts more than data-mate does: `01.02.03.04` casts to `1.2.3.4`, while `IPV4_RE` in
17
+ * `ip-utils` rejects leading zeros, and `1.2.3.4/24` casts as an address, while data-mate calls
18
+ * it a CIDR. This regex is `IPV4_RE`, so it rejects both.
19
+ */
20
+ export declare function isIPv4Sql(value: string): string;
21
+ /**
22
+ * IPv6: a successful cast, plus two checks the cast alone would miss.
23
+ *
24
+ * `IPAddress.isIPv6` requires a colon, and a `/prefix` makes the value a CIDR rather than an
25
+ * address.
26
+ */
27
+ export declare function isIPv6Sql(value: string): string;
28
+ /** Either family, as `IPAddress.isValid` accepts. */
29
+ export declare function isIPSql(value: string): string;
30
+ /** CIDR notation: a prefix is present and the value casts to `INET`. */
31
+ export declare function isCIDRSql(value: string): string;
32
+ /**
33
+ * An IPv4 address mapped into IPv6: `::ffff:a.b.c.d`, or the deprecated `::a.b.c.d`.
34
+ *
35
+ * The second form is matched on the text. `isMappedIPv4` returns true for `::0.0.0.0` and false
36
+ * for `::`, which are the same 128 bits, because `ip-utils` matches `IPV4_COMPAT_RE` against the
37
+ * input string. No containment test can tell them apart, and testing `::/96` would wrongly match
38
+ * `::` and `::1`.
39
+ */
40
+ export declare function isMappedIPv4Sql(value: string): string;
41
+ /**
42
+ * Routability, as a set of containment tests.
43
+ *
44
+ * The `inet` extension has no `family()` and no reserved-range function. The three branches follow
45
+ * `IPAddress.isRoutable` in order: IPv4 against the v4 table, a mapped address against the lifted
46
+ * v4 table, and any other IPv6 against the v6 table. A value that is not an IP is not routable.
47
+ */
48
+ export declare function isRoutableSql(value: string): string;
49
+ /**
50
+ * ## How the IP transforms handle bad input
51
+ *
52
+ * A validation returns null for a bad value, but a transform throws, which aborts the whole query
53
+ * as it does in `DataFrame`. SQL's `error()` would also abort, but with DuckDB's message instead of
54
+ * the function's own.
55
+ *
56
+ * So these expressions never raise. Each one is
57
+ * `CASE WHEN <native branch is exact> THEN <native> ELSE udf(x) END` with `needs_udf_fallback`.
58
+ * DuckDB's `CASE` short-circuits, so the UDF runs only for values the native branch cannot handle,
59
+ * and it throws the real JavaScript error. Every other value stays on the native path.
60
+ */
61
+ /**
62
+ * The network address of a CIDR block, as a bare `INET` with the prefix dropped.
63
+ *
64
+ * The prefix must go before any arithmetic. DuckDB refuses arithmetic that leaves the subnet:
65
+ * `network('10.0.0.0/8'::INET) - 1` fails with `Out of Range Error`, and the first and last usable
66
+ * addresses need exactly that step. On a bare address it is plain address arithmetic, as in
67
+ * `IPAddress.offset`.
68
+ */
69
+ export declare function cidrNetwork(value: string): string;
70
+ /** The broadcast address of a CIDR block, also as a bare `INET`. */
71
+ export declare function cidrBroadcast(value: string): string;
72
+ /**
73
+ * True when the block holds a single address.
74
+ *
75
+ * The ends are compared with `host(a) = host(b)` rather than `a = b`, because `INET` equality does
76
+ * not return true for a `/32` whose two ends print the same.
77
+ */
78
+ export declare function isSingleAddress(value: string): string;
79
+ /**
80
+ * True for a value whose result `host()` and `ip-utils` would print differently, so the UDF
81
+ * handles it.
82
+ *
83
+ * `host()` prints an IPv4-mapped address with a dotted tail (`::ffff:0.0.0.0`), while
84
+ * `intToIPv6String` prints `::ffff:0:0`. Other IPv6 blocks print the same on both paths, so only
85
+ * the mapped range is excluded.
86
+ */
87
+ export declare function isMappedResult(value: string): string;
88
+ /**
89
+ * True for the one block whose first usable address DuckDB cannot reach by addition.
90
+ *
91
+ * `INET '255.255.255.254' + 1` raises `Out of Range Error`. Subtracting from `255.255.255.255`
92
+ * works and IPv6 has no such limit, so only the first usable address is affected.
93
+ */
94
+ export declare function firstUsableHitsTopOfV4(value: string): string;
95
+ /** An IPv4 CIDR, which is all `getCIDRNetwork` and `getCIDRBroadcast` accept. */
96
+ export declare function isIPv4CIDRSql(value: string): string;
97
+ /**
98
+ * An IPv4 address as its integer value.
99
+ *
100
+ * DuckDB has no `inet_aton` and no cast from `INET` to a number, so this weights the four dotted
101
+ * parts. Each part is cast to `HUGEINT`.
102
+ */
103
+ export declare function ipv4ToIntSql(value: string): string;
104
+ /** An integer as a dotted-quad IPv4 address: the exact inverse of `ipv4ToIntSql`. */
105
+ export declare function intToIPv4Sql(value: string): string;
106
+ /**
107
+ * The input as a `HUGEINT` when it is a plain run of digits, otherwise null.
108
+ *
109
+ * The check is a digit regex, deliberately narrower than a cast. `intToIP` calls `BigInt(input)`,
110
+ * and `BigInt` and `TRY_CAST(x AS HUGEINT)` disagree on several inputs: SQL accepts `'12.0'`,
111
+ * `'12.5'`, `'1e3'` and `'1_000'` where `BigInt` throws, and `BigInt` accepts `'0x10'`, `'0b11'`
112
+ * and `''` where the cast gives null. Both accept `^[0-9]+$`, so every disputed input keeps the
113
+ * UDF.
114
+ */
115
+ export declare function plainIntegerSql(value: string): string;
116
+ //# sourceMappingURL=sql-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-utils.d.ts","sourceRoot":"","sources":["../../../../src/function-configs/ip/sql-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;EASE;AAcF,uEAAuE;AACvE,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;;;;;EAME;AACF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;;;;EAKE;AACF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED,qDAAqD;AACrD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;;;;EAOE;AACF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrD;AAqBD;;;;;;EAME;AACF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED;;;;;;;;;;;EAWE;AAEF;;;;;;;EAOE;AACF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;EAKE;AACF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;;;EAOE;AACF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;EAKE;AACF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;EAKE;AACF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED;;;;;;;;EAQE;AACF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrD"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * SQL forms of the IP functions, shared by the function configs in this directory.
3
+ *
4
+ * These need the `inet` extension, which is not statically linked into `@duckdb/node-api`. It
5
+ * autoloads on first use by downloading from the DuckDB repository, so a host with no network
6
+ * access and no installed copy gets a query error. `TealFrame` loads it when it opens.
7
+ *
8
+ * `test/teal-frame/sql-emission-spec.ts` checks each expression against `@terascope/ip-utils`.
9
+ * Where the two would disagree, the guard that handles it says so.
10
+ */
11
+ import { NON_ROUTABLE_IPV4_CIDRS, NON_ROUTABLE_IPV6_CIDRS } from '@terascope/ip-utils';
12
+ /**
13
+ * The address with any scope ID removed, because `INET` has no scope ID and the cast fails.
14
+ *
15
+ * `parseIPv6Int` stops at the first `%` and keeps the scope only for display, so `fe80::1%eth0`
16
+ * is a valid IPv6 address to data-mate.
17
+ */
18
+ function unscoped(value) {
19
+ return `regexp_replace(${value}, '%.*$', '')`;
20
+ }
21
+ /** The value as an `INET`, or null. Any scope ID is stripped first. */
22
+ export function asInet(value) {
23
+ return `TRY_CAST(${unscoped(value)} AS INET)`;
24
+ }
25
+ /**
26
+ * Dotted-quad IPv4, matched by regex rather than `TRY_CAST`.
27
+ *
28
+ * `INET` accepts more than data-mate does: `01.02.03.04` casts to `1.2.3.4`, while `IPV4_RE` in
29
+ * `ip-utils` rejects leading zeros, and `1.2.3.4/24` casts as an address, while data-mate calls
30
+ * it a CIDR. This regex is `IPV4_RE`, so it rejects both.
31
+ */
32
+ export function isIPv4Sql(value) {
33
+ return `regexp_matches(${value},`
34
+ + ' \'^(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])'
35
+ + '(\\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}$\')';
36
+ }
37
+ /**
38
+ * IPv6: a successful cast, plus two checks the cast alone would miss.
39
+ *
40
+ * `IPAddress.isIPv6` requires a colon, and a `/prefix` makes the value a CIDR rather than an
41
+ * address.
42
+ */
43
+ export function isIPv6Sql(value) {
44
+ return `(contains(${value}, ':') AND NOT contains(${value}, '/')`
45
+ + ` AND ${asInet(value)} IS NOT NULL)`;
46
+ }
47
+ /** Either family, as `IPAddress.isValid` accepts. */
48
+ export function isIPSql(value) {
49
+ return `(${isIPv4Sql(value)} OR ${isIPv6Sql(value)})`;
50
+ }
51
+ /** CIDR notation: a prefix is present and the value casts to `INET`. */
52
+ export function isCIDRSql(value) {
53
+ return `(contains(${value}, '/') AND ${asInet(value)} IS NOT NULL)`;
54
+ }
55
+ /**
56
+ * An IPv4 address mapped into IPv6: `::ffff:a.b.c.d`, or the deprecated `::a.b.c.d`.
57
+ *
58
+ * The second form is matched on the text. `isMappedIPv4` returns true for `::0.0.0.0` and false
59
+ * for `::`, which are the same 128 bits, because `ip-utils` matches `IPV4_COMPAT_RE` against the
60
+ * input string. No containment test can tell them apart, and testing `::/96` would wrongly match
61
+ * `::` and `::1`.
62
+ */
63
+ export function isMappedIPv4Sql(value) {
64
+ return `(${isIPv6Sql(value)} AND (${asInet(value)} <<= INET '::ffff:0:0/96'`
65
+ + ` OR regexp_matches(${value}, '^::([0-9]+\\.){3}[0-9]+(%.*)?$')))`;
66
+ }
67
+ /**
68
+ * A v4 CIDR in both IPv4-in-IPv6 forms, with the prefix length increased by 96.
69
+ *
70
+ * `isRoutable` judges a mapped address by its embedded IPv4 before it checks the IPv6 table, so
71
+ * `::ffff:8.8.8.8` is routable even though `::ffff:0:0/96` is listed as non-routable. Testing
72
+ * against the lifted v4 ranges asks the same question without extracting the low 32 bits.
73
+ */
74
+ function liftedV4(cidr) {
75
+ const [base, prefix] = cidr.split('/');
76
+ const shifted = Number(prefix) + 96;
77
+ return [`::ffff:${base}/${shifted}`, `::${base}/${shifted}`];
78
+ }
79
+ const LIFTED_NON_ROUTABLE_IPV4 = NON_ROUTABLE_IPV4_CIDRS.flatMap(liftedV4);
80
+ function inAny(subject, cidrs) {
81
+ return `(${cidrs.map((cidr) => `${subject} <<= INET '${cidr}'`).join(' OR ')})`;
82
+ }
83
+ /**
84
+ * Routability, as a set of containment tests.
85
+ *
86
+ * The `inet` extension has no `family()` and no reserved-range function. The three branches follow
87
+ * `IPAddress.isRoutable` in order: IPv4 against the v4 table, a mapped address against the lifted
88
+ * v4 table, and any other IPv6 against the v6 table. A value that is not an IP is not routable.
89
+ */
90
+ export function isRoutableSql(value) {
91
+ const inet = asInet(value);
92
+ return 'CASE'
93
+ + ` WHEN ${isIPv4Sql(value)} THEN NOT ${inAny(inet, NON_ROUTABLE_IPV4_CIDRS)}`
94
+ + ` WHEN ${isMappedIPv4Sql(value)} THEN NOT ${inAny(inet, LIFTED_NON_ROUTABLE_IPV4)}`
95
+ + ` WHEN ${isIPv6Sql(value)} THEN NOT ${inAny(inet, NON_ROUTABLE_IPV6_CIDRS)}`
96
+ + ' ELSE false END';
97
+ }
98
+ /**
99
+ * ## How the IP transforms handle bad input
100
+ *
101
+ * A validation returns null for a bad value, but a transform throws, which aborts the whole query
102
+ * as it does in `DataFrame`. SQL's `error()` would also abort, but with DuckDB's message instead of
103
+ * the function's own.
104
+ *
105
+ * So these expressions never raise. Each one is
106
+ * `CASE WHEN <native branch is exact> THEN <native> ELSE udf(x) END` with `needs_udf_fallback`.
107
+ * DuckDB's `CASE` short-circuits, so the UDF runs only for values the native branch cannot handle,
108
+ * and it throws the real JavaScript error. Every other value stays on the native path.
109
+ */
110
+ /**
111
+ * The network address of a CIDR block, as a bare `INET` with the prefix dropped.
112
+ *
113
+ * The prefix must go before any arithmetic. DuckDB refuses arithmetic that leaves the subnet:
114
+ * `network('10.0.0.0/8'::INET) - 1` fails with `Out of Range Error`, and the first and last usable
115
+ * addresses need exactly that step. On a bare address it is plain address arithmetic, as in
116
+ * `IPAddress.offset`.
117
+ */
118
+ export function cidrNetwork(value) {
119
+ return `host(network(${asInet(value)}))::INET`;
120
+ }
121
+ /** The broadcast address of a CIDR block, also as a bare `INET`. */
122
+ export function cidrBroadcast(value) {
123
+ return `host(broadcast(${asInet(value)}))::INET`;
124
+ }
125
+ /**
126
+ * True when the block holds a single address.
127
+ *
128
+ * The ends are compared with `host(a) = host(b)` rather than `a = b`, because `INET` equality does
129
+ * not return true for a `/32` whose two ends print the same.
130
+ */
131
+ export function isSingleAddress(value) {
132
+ return `host(${cidrNetwork(value)}) = host(${cidrBroadcast(value)})`;
133
+ }
134
+ /**
135
+ * True for a value whose result `host()` and `ip-utils` would print differently, so the UDF
136
+ * handles it.
137
+ *
138
+ * `host()` prints an IPv4-mapped address with a dotted tail (`::ffff:0.0.0.0`), while
139
+ * `intToIPv6String` prints `::ffff:0:0`. Other IPv6 blocks print the same on both paths, so only
140
+ * the mapped range is excluded.
141
+ */
142
+ export function isMappedResult(value) {
143
+ return `(contains(${value}, ':') AND ${asInet(value)} <<= INET '::ffff:0:0/96')`;
144
+ }
145
+ /**
146
+ * True for the one block whose first usable address DuckDB cannot reach by addition.
147
+ *
148
+ * `INET '255.255.255.254' + 1` raises `Out of Range Error`. Subtracting from `255.255.255.255`
149
+ * works and IPv6 has no such limit, so only the first usable address is affected.
150
+ */
151
+ export function firstUsableHitsTopOfV4(value) {
152
+ return `host(${cidrNetwork(value)}) = '255.255.255.254'`;
153
+ }
154
+ /** An IPv4 CIDR, which is all `getCIDRNetwork` and `getCIDRBroadcast` accept. */
155
+ export function isIPv4CIDRSql(value) {
156
+ return `(${isCIDRSql(value)} AND NOT contains(${value}, ':'))`;
157
+ }
158
+ /**
159
+ * An IPv4 address as its integer value.
160
+ *
161
+ * DuckDB has no `inet_aton` and no cast from `INET` to a number, so this weights the four dotted
162
+ * parts. Each part is cast to `HUGEINT`.
163
+ */
164
+ export function ipv4ToIntSql(value) {
165
+ const part = (n) => `CAST(string_split(${value}, '.')[${n}] AS HUGEINT)`;
166
+ return `${part(1)} * 16777216 + ${part(2)} * 65536 + ${part(3)} * 256 + ${part(4)}`;
167
+ }
168
+ /** An integer as a dotted-quad IPv4 address: the exact inverse of `ipv4ToIntSql`. */
169
+ export function intToIPv4Sql(value) {
170
+ const octet = (expression) => `CAST(${expression} AS VARCHAR)`;
171
+ return `${octet(`${value} // 16777216`)} || '.' || ${octet(`(${value} // 65536) % 256`)}`
172
+ + ` || '.' || ${octet(`(${value} // 256) % 256`)} || '.' || ${octet(`${value} % 256`)}`;
173
+ }
174
+ /**
175
+ * The input as a `HUGEINT` when it is a plain run of digits, otherwise null.
176
+ *
177
+ * The check is a digit regex, deliberately narrower than a cast. `intToIP` calls `BigInt(input)`,
178
+ * and `BigInt` and `TRY_CAST(x AS HUGEINT)` disagree on several inputs: SQL accepts `'12.0'`,
179
+ * `'12.5'`, `'1e3'` and `'1_000'` where `BigInt` throws, and `BigInt` accepts `'0x10'`, `'0b11'`
180
+ * and `''` where the cast gives null. Both accept `^[0-9]+$`, so every disputed input keeps the
181
+ * UDF.
182
+ */
183
+ export function plainIntegerSql(value) {
184
+ return `CASE WHEN regexp_matches(${value}, '^[0-9]+$')`
185
+ + ` THEN TRY_CAST(${value} AS HUGEINT) ELSE NULL END`;
186
+ }
187
+ //# sourceMappingURL=sql-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-utils.js","sourceRoot":"","sources":["../../../../src/function-configs/ip/sql-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;EASE;AAEF,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEvF;;;;;EAKE;AACF,SAAS,QAAQ,CAAC,KAAa;IAC3B,OAAO,kBAAkB,KAAK,eAAe,CAAC;AAClD,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,MAAM,CAAC,KAAa;IAChC,OAAO,YAAY,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;AAClD,CAAC;AAED;;;;;;EAME;AACF,MAAM,UAAU,SAAS,CAAC,KAAa;IACnC,OAAO,kBAAkB,KAAK,GAAG;UAC3B,iDAAiD;UACjD,yDAAyD,CAAC;AACpE,CAAC;AAED;;;;;EAKE;AACF,MAAM,UAAU,SAAS,CAAC,KAAa;IACnC,OAAO,aAAa,KAAK,2BAA2B,KAAK,QAAQ;UAC3D,QAAQ,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;AAC/C,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,OAAO,CAAC,KAAa;IACjC,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1D,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,SAAS,CAAC,KAAa;IACnC,OAAO,aAAa,KAAK,cAAc,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;AACxE,CAAC;AAED;;;;;;;EAOE;AACF,MAAM,UAAU,eAAe,CAAC,KAAa;IACzC,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,2BAA2B;UACtE,sBAAsB,KAAK,uCAAuC,CAAC;AAC7E,CAAC;AAED;;;;;;EAME;AACF,SAAS,QAAQ,CAAC,IAAY;IAC1B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;IACpC,OAAO,CAAC,UAAU,IAAI,IAAI,OAAO,EAAE,EAAE,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,wBAAwB,GAAG,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE3E,SAAS,KAAK,CAAC,OAAe,EAAE,KAAwB;IACpD,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,OAAO,cAAc,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACpF,CAAC;AAED;;;;;;EAME;AACF,MAAM,UAAU,aAAa,CAAC,KAAa;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,OAAO,MAAM;UACP,SAAS,SAAS,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,IAAI,EAAE,uBAAuB,CAAC,EAAE;UAC5E,SAAS,eAAe,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,EAAE;UACnF,SAAS,SAAS,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,IAAI,EAAE,uBAAuB,CAAC,EAAE;UAC5E,iBAAiB,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;EAWE;AAEF;;;;;;;EAOE;AACF,MAAM,UAAU,WAAW,CAAC,KAAa;IACrC,OAAO,gBAAgB,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;AACnD,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,aAAa,CAAC,KAAa;IACvC,OAAO,kBAAkB,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;AACrD,CAAC;AAED;;;;;EAKE;AACF,MAAM,UAAU,eAAe,CAAC,KAAa;IACzC,OAAO,QAAQ,WAAW,CAAC,KAAK,CAAC,YAAY,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;AACzE,CAAC;AAED;;;;;;;EAOE;AACF,MAAM,UAAU,cAAc,CAAC,KAAa;IACxC,OAAO,aAAa,KAAK,cAAc,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC;AACrF,CAAC;AAED;;;;;EAKE;AACF,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAChD,OAAO,QAAQ,WAAW,CAAC,KAAK,CAAC,uBAAuB,CAAC;AAC7D,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAAC,KAAa;IACvC,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,qBAAqB,KAAK,SAAS,CAAC;AACnE,CAAC;AAED;;;;;EAKE;AACF,MAAM,UAAU,YAAY,CAAC,KAAa;IACtC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,qBAAqB,KAAK,UAAU,CAAC,eAAe,CAAC;IACjF,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AACxF,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,YAAY,CAAC,KAAa;IACtC,MAAM,KAAK,GAAG,CAAC,UAAkB,EAAE,EAAE,CAAC,QAAQ,UAAU,cAAc,CAAC;IACvE,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,cAAc,CAAC,cAAc,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAC,EAAE;UACnF,cAAc,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,cAAc,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,EAAE,CAAC;AAChG,CAAC;AAED;;;;;;;;EAQE;AACF,MAAM,UAAU,eAAe,CAAC,KAAa;IACzC,OAAO,4BAA4B,KAAK,eAAe;UACjD,kBAAkB,KAAK,4BAA4B,CAAC;AAC9D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"toCIDR.d.ts","sourceRoot":"","sources":["../../../../src/function-configs/ip/toCIDR.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,oBAAoB,EACvB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,YAAY,EAAE,oBAAoB,CAAC,UAAU,CAiDzD,CAAC"}
1
+ {"version":3,"file":"toCIDR.d.ts","sourceRoot":"","sources":["../../../../src/function-configs/ip/toCIDR.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,oBAAoB,EACvB,MAAM,kBAAkB,CAAC;AAK1B,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,YAAY,EAAE,oBAAoB,CAAC,UAAU,CAmEzD,CAAC"}
@@ -2,6 +2,7 @@ import { isNumberLike, toNumber, toString } from '@terascope/core-utils';
2
2
  import { toCIDR } from '@terascope/ip-utils';
3
3
  import { FieldType } from '@terascope/types';
4
4
  import { ProcessMode, FunctionDefinitionType, FunctionDefinitionCategory } from '../interfaces.js';
5
+ import { isIPSql, isMappedResult, } from './sql-utils.js';
5
6
  export const toCIDRConfig = {
6
7
  name: 'toCIDR',
7
8
  type: FunctionDefinitionType.FIELD_TRANSFORM,
@@ -31,6 +32,24 @@ export const toCIDRConfig = {
31
32
  }
32
33
  ],
33
34
  description: 'Returns a CIDR address based on the provided IP and suffix',
35
+ /**
36
+ * The block containing the address at the given suffix, as `network/prefix`.
37
+ *
38
+ * `validate_arguments` has already checked that the suffix is in range for the address
39
+ * family. `applies` sends a non-integer suffix to the UDF. A value that is not an IP also goes
40
+ * to the UDF and throws.
41
+ */
42
+ sql: {
43
+ needs_udf_fallback: true,
44
+ applies: (args) => Number.isInteger(Number(args.suffix)),
45
+ expression: ({ value, args, udf }) => {
46
+ const suffix = Number(args.suffix);
47
+ const block = `(${value} || '/${suffix}')::INET`;
48
+ return `CASE WHEN ${isIPSql(value)} AND NOT ${isMappedResult(value)}`
49
+ + ` THEN host(network(${block})) || '/${suffix}'`
50
+ + ` ELSE ${udf(value)} END`;
51
+ },
52
+ },
34
53
  accepts: [FieldType.String, FieldType.IP],
35
54
  create({ args: { suffix } }) {
36
55
  return (input) => toCIDR(input, toString(suffix));
@@ -1 +1 @@
1
- {"version":3,"file":"toCIDR.js","sourceRoot":"","sources":["../../../../src/function-configs/ip/toCIDR.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACH,WAAW,EAAE,sBAAsB,EAAE,0BAA0B,EAElE,MAAM,kBAAkB,CAAC;AAM1B,MAAM,CAAC,MAAM,YAAY,GAAqC;IAC1D,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,sBAAsB,CAAC,eAAe;IAC5C,YAAY,EAAE,WAAW,CAAC,iBAAiB;IAC3C,QAAQ,EAAE,0BAA0B,CAAC,EAAE;IACvC,QAAQ,EAAE;QACN;YACI,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACpB,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE;YACzE,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,YAAY;SACvB;QACD;YACI,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACpB,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE;YACzE,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,YAAY;SACvB;QACD;YACI,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;YACtB,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE;YACzE,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,yCAAyC;YAChD,MAAM,EAAE,mBAAmB;SAC9B;KACJ;IACD,WAAW,EAAE,4DAA4D;IACzE,OAAO,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;IACzC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;QACvB,OAAO,CAAC,KAAc,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,eAAe,EAAE;QACb,MAAM,EAAE;YACJ,IAAI,EAAE,SAAS,CAAC,GAAG;YACnB,WAAW,EAAE,mFAAmF;SACnG;KACJ;IACD,kBAAkB,EAAE,CAAC,QAAQ,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,EAAE;QACzB,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAE/B,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG;gBAAE,OAAO;QAC3C,CAAC;QAED,MAAM,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACrG,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"toCIDR.js","sourceRoot":"","sources":["../../../../src/function-configs/ip/toCIDR.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setDefault.d.ts","sourceRoot":"","sources":["../../../../src/function-configs/json/setDefault.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,oBAAoB,EAIvB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,gBAAgB,EAAE,oBAAoB,CAAC,cAAc,CAgEjE,CAAC"}
1
+ {"version":3,"file":"setDefault.d.ts","sourceRoot":"","sources":["../../../../src/function-configs/json/setDefault.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,oBAAoB,EAIvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,gBAAgB,EAAE,oBAAoB,CAAC,cAAc,CAgFjE,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { FieldType, } from '@terascope/types';
2
2
  import { castArray } from '@terascope/core-utils';
3
3
  import { ProcessMode, FunctionDefinitionType, FunctionDefinitionCategory } from '../interfaces.js';
4
+ import { primitiveLiteral, literalMatchesColumn } from '../sql-helpers.js';
4
5
  export const setDefaultConfig = {
5
6
  name: 'setDefault',
6
7
  type: FunctionDefinitionType.FIELD_TRANSFORM,
@@ -47,6 +48,22 @@ export const setDefaultConfig = {
47
48
  return value != null ? value : args.value;
48
49
  };
49
50
  },
51
+ /**
52
+ * `coalesce`, for a scalar string column with a string default. Other shapes keep the UDF.
53
+ *
54
+ * `output_type` is always `Keyword`, but the implementation returns the value unchanged, so on
55
+ * any other column type the input, output and default types disagree. The SQL form is limited
56
+ * to string columns, where all three agree.
57
+ *
58
+ * On an array column the function defaults each element and turns a null column into `[value]`,
59
+ * so arrays also keep the UDF.
60
+ */
61
+ sql: {
62
+ applies: (args, inputConfig) => typeof args.value === 'string'
63
+ && !inputConfig?.field_config?.array
64
+ && literalMatchesColumn(args.value, inputConfig.field_config.type),
65
+ expression: ({ value, args }) => `coalesce(${value}, ${primitiveLiteral(args.value)})`,
66
+ },
50
67
  accepts: [],
51
68
  argument_schema: {
52
69
  value: {
@@ -1 +1 @@
1
- {"version":3,"file":"setDefault.js","sourceRoot":"","sources":["../../../../src/function-configs/json/setDefault.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,SAAS,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEH,WAAW,EACX,sBAAsB,EACtB,0BAA0B,EAC7B,MAAM,kBAAkB,CAAC;AAM1B,MAAM,CAAC,MAAM,gBAAgB,GAAyC;IAClE,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,sBAAsB,CAAC,eAAe;IAC5C,YAAY,EAAE,WAAW,CAAC,WAAW;IACrC,QAAQ,EAAE,0BAA0B,CAAC,IAAI;IACzC,WAAW,EAAE,2DAA2D;IACxE,QAAQ,EAAE;QACN;YACI,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;YAC1B,MAAM,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE;aACpD;YACD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,SAAS;SACpB;QACD;YACI,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;YAC1B,MAAM,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;aACjE;YACD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,CAAC,SAAS,CAAC;SACtB;KACJ;IACD,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;QACxB,IAAI,WAAW,GAAG,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC;QACnD,OAAO,SAAS,UAAU,CAAC,KAAK;YAC5B,IAAI,WAAW,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,WAAW,GAAG,IAAI,CAAC;YACvB,CAAC;YACD,IAAI,WAAW,EAAE,CAAC;gBACd,IAAI,KAAK,IAAI,IAAI;oBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvC,MAAM,MAAM,GAAG,EAAE,CAAC;gBAClB,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAChD,CAAC;gBACD,OAAO,MAAM,CAAC;YAClB,CAAC;YACD,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9C,CAAC,CAAC;IACN,CAAC;IACD,OAAO,EAAE,EAAE;IACX,eAAe,EAAE;QACb,KAAK,EAAE;YACH,IAAI,EAAE,SAAS,CAAC,GAAG;YACnB,WAAW,EAAE,0BAA0B;SAC1C;KACJ;IACD,kBAAkB,EAAE,CAAC,OAAO,CAAC;IAC7B,WAAW,CAAC,WAAW;QACnB,MAAM,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC;QAErC,OAAO;YACH,YAAY,EAAE;gBACV,WAAW,EAAE,YAAY,CAAC,WAAW;gBACrC,KAAK,EAAE,YAAY,CAAC,KAAK;gBACzB,IAAI,EAAE,SAAS,CAAC,OAAO;aAC1B;SACJ,CAAC;IACN,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"setDefault.js","sourceRoot":"","sources":["../../../../src/function-configs/json/setDefault.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { FieldType } from '@terascope/types';
2
+ /**
3
+ * Helpers shared by the SQL expressions on the json function configs.
4
+ */
5
+ /**
6
+ * The column types where `to_json` produces exactly what `JSON.stringify` produces.
7
+ *
8
+ * The other types are left out on purpose:
9
+ *
10
+ * - Floating point: `to_json(2.0)` is `'2.0'` where `JSON.stringify(2)` is `'2'`, and `to_json`
11
+ * writes `1e21` where JavaScript writes `1e+21`.
12
+ * - Date: a TIMESTAMP renders as `"2026-01-02 03:04:05.678"`, without the `T` or the `Z`.
13
+ * - Integer and Long: not yet compared against the JavaScript. `to_json` renders them, and the
14
+ * UDF path handles them (see `udf-types-spec`), so they are candidates to add.
15
+ * - Any/JSON, GeoJSON, GeoPoint, Object and Tuple: not yet compared against the JavaScript.
16
+ * `to_json` on a STRUCT matches `JSON.stringify`, including key order, so these are candidates to
17
+ * add.
18
+ */
19
+ export declare const JSON_SQL_TYPES: readonly FieldType[];
20
+ //# sourceMappingURL=sql-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-utils.d.ts","sourceRoot":"","sources":["../../../../src/function-configs/json/sql-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;EAEE;AAEF;;;;;;;;;;;;;EAaE;AACF,eAAO,MAAM,cAAc,EAAE,SAAS,SAAS,EAM9C,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { FieldType } from '@terascope/types';
2
+ /**
3
+ * Helpers shared by the SQL expressions on the json function configs.
4
+ */
5
+ /**
6
+ * The column types where `to_json` produces exactly what `JSON.stringify` produces.
7
+ *
8
+ * The other types are left out on purpose:
9
+ *
10
+ * - Floating point: `to_json(2.0)` is `'2.0'` where `JSON.stringify(2)` is `'2'`, and `to_json`
11
+ * writes `1e21` where JavaScript writes `1e+21`.
12
+ * - Date: a TIMESTAMP renders as `"2026-01-02 03:04:05.678"`, without the `T` or the `Z`.
13
+ * - Integer and Long: not yet compared against the JavaScript. `to_json` renders them, and the
14
+ * UDF path handles them (see `udf-types-spec`), so they are candidates to add.
15
+ * - Any/JSON, GeoJSON, GeoPoint, Object and Tuple: not yet compared against the JavaScript.
16
+ * `to_json` on a STRUCT matches `JSON.stringify`, including key order, so these are candidates to
17
+ * add.
18
+ */
19
+ export const JSON_SQL_TYPES = [
20
+ FieldType.String,
21
+ FieldType.Keyword,
22
+ FieldType.Text,
23
+ FieldType.NgramTokens,
24
+ FieldType.Boolean,
25
+ ];
26
+ //# sourceMappingURL=sql-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-utils.js","sourceRoot":"","sources":["../../../../src/function-configs/json/sql-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;EAEE;AAEF;;;;;;;;;;;;;EAaE;AACF,MAAM,CAAC,MAAM,cAAc,GAAyB;IAChD,SAAS,CAAC,MAAM;IAChB,SAAS,CAAC,OAAO;IACjB,SAAS,CAAC,IAAI;IACd,SAAS,CAAC,WAAW;IACrB,SAAS,CAAC,OAAO;CACpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"toJSON.d.ts","sourceRoot":"","sources":["../../../../src/function-configs/json/toJSON.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,oBAAoB,EAKvB,MAAM,kBAAkB,CAAC;AAE1B,eAAO,MAAM,YAAY,EAAE,oBAyF1B,CAAC"}
1
+ {"version":3,"file":"toJSON.d.ts","sourceRoot":"","sources":["../../../../src/function-configs/json/toJSON.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,oBAAoB,EAKvB,MAAM,kBAAkB,CAAC;AAG1B,eAAO,MAAM,YAAY,EAAE,oBAqG1B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { isBigInt, bigIntToJSON, isNil, isObjectEntity, toJSONCompatibleValue } from '@terascope/core-utils';
2
2
  import { FieldType } from '@terascope/types';
3
3
  import { ProcessMode, FunctionDefinitionType, FunctionDefinitionCategory } from '../interfaces.js';
4
+ import { JSON_SQL_TYPES } from './sql-utils.js';
4
5
  export const toJSONConfig = {
5
6
  name: 'toJSON',
6
7
  type: FunctionDefinitionType.FIELD_TRANSFORM,
@@ -79,6 +80,18 @@ export const toJSONConfig = {
79
80
  return JSON.stringify(input);
80
81
  };
81
82
  },
83
+ sql: {
84
+ /**
85
+ * `to_json`, which matches `JSON.stringify` for the column types in `JSON_SQL_TYPES`,
86
+ * including the escaping of quotes, tabs, backslashes and astral characters.
87
+ * `JSON_SQL_TYPES` explains which types stay on the UDF and why.
88
+ *
89
+ * An array column is declined because `output_type` declares a non-array result.
90
+ */
91
+ applies: (_args, inputConfig) => !inputConfig.field_config.array
92
+ && JSON_SQL_TYPES.includes(inputConfig.field_config.type),
93
+ expression: ({ value }) => `CAST(to_json(${value}) AS VARCHAR)`,
94
+ },
82
95
  accepts: [],
83
96
  output_type(_inputConfig) {
84
97
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"toJSON.js","sourceRoot":"","sources":["../../../../src/function-configs/json/toJSON.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EAAE,YAAY,EAAE,KAAK,EAC7B,cAAc,EAAE,qBAAqB,EACxC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAEH,WAAW,EACX,sBAAsB,EAEtB,0BAA0B,EAC7B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,MAAM,YAAY,GAAyB;IAC9C,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,sBAAsB,CAAC,eAAe;IAC5C,YAAY,EAAE,WAAW,CAAC,WAAW;IACrC,WAAW,EAAE,qCAAqC;IAClD,QAAQ,EAAE,0BAA0B,CAAC,IAAI;IACzC,QAAQ,EAAE;QACN;YACI,IAAI,EAAE,EAAE;YACR,MAAM,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE;oBACJ,SAAS,EAAE;wBACP,IAAI,EAAE,SAAS,CAAC,IAAI;qBACvB;iBACJ;aACJ;YACD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,EAAE,6BAA6B;SACxC;QACD;YACI,IAAI,EAAE,EAAE;YACR,MAAM,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE;oBACJ,SAAS,EAAE;wBACP,IAAI,EAAE,SAAS,CAAC,OAAO;qBAC1B;iBACJ;aACJ;YACD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,OAAO;SAClB;QACD;YACI,IAAI,EAAE,EAAE;YACR,MAAM,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE;oBACJ,SAAS,EAAE;wBACP,IAAI,EAAE,SAAS,CAAC,MAAM;qBACzB;iBACJ;aACJ;YACD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;YACrB,MAAM,EAAE,eAAe;SAC1B;QACD;YACI,IAAI,EAAE,EAAE;YACR,MAAM,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE;oBACJ,SAAS,EAAE;wBACP,IAAI,EAAE,SAAS,CAAC,MAAM;qBACzB;iBACJ;aACJ;YACD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE;YAC3C,MAAM,EAAE,0CAA0C;SACrD;KACJ;IACD,MAAM;QACF,OAAO,CAAC,KAAc,EAAE,EAAE;YACtB,IAAI,KAAK,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAE9B,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClB,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YAED,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAChD,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACtC,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC;IACN,CAAC;IACD,OAAO,EAAE,EAAE;IACX,WAAW,CAAC,YAAsC;QAC9C,OAAO;YACH,YAAY,EAAE;gBACV,IAAI,EAAE,SAAS,CAAC,MAAM;gBACtB,KAAK,EAAE,KAAK;aACf;SACJ,CAAC;IACN,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"toJSON.js","sourceRoot":"","sources":["../../../../src/function-configs/json/toJSON.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"abs.d.ts","sourceRoot":"","sources":["../../../../src/function-configs/numeric/abs.ts"],"names":[],"mappings":"AACA,OAAO,EACH,oBAAoB,EAIvB,MAAM,kBAAkB,CAAC;AAG1B,eAAO,MAAM,SAAS,EAAE,oBAyBvB,CAAC"}
1
+ {"version":3,"file":"abs.d.ts","sourceRoot":"","sources":["../../../../src/function-configs/numeric/abs.ts"],"names":[],"mappings":"AACA,OAAO,EACH,oBAAoB,EAIvB,MAAM,kBAAkB,CAAC;AAI1B,eAAO,MAAM,SAAS,EAAE,oBA6BvB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { FieldType } from '@terascope/types';
2
2
  import { ProcessMode, FunctionDefinitionType, FunctionDefinitionCategory, } from '../interfaces.js';
3
+ import { finiteOrNull } from '../sql-helpers.js';
3
4
  import { runMathFn } from './utils.js';
4
5
  export const absConfig = {
5
6
  name: 'abs',
@@ -22,6 +23,10 @@ export const absConfig = {
22
23
  create() {
23
24
  return runMathFn(Math.abs);
24
25
  },
26
+ /** Native `abs`, keeping `runMathFn`'s rule that a non-finite result is null. */
27
+ sql: {
28
+ expression: ({ value }) => finiteOrNull(`abs(${value})`),
29
+ },
25
30
  accepts: [
26
31
  FieldType.Number,
27
32
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"abs.js","sourceRoot":"","sources":["../../../../src/function-configs/numeric/abs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAEH,WAAW,EACX,sBAAsB,EACtB,0BAA0B,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,CAAC,MAAM,SAAS,GAAyB;IAC3C,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,sBAAsB,CAAC,eAAe;IAC5C,YAAY,EAAE,WAAW,CAAC,iBAAiB;IAC3C,QAAQ,EAAE,0BAA0B,CAAC,OAAO;IAC5C,WAAW,EAAE,yCAAyC;IACtD,QAAQ,EAAE;QACN;YACI,IAAI,EAAE,EAAE;YACR,MAAM,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE;aAClD;YACD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC,CAAC;YACT,MAAM,EAAE,CAAC;SACZ;KACJ;IACD,MAAM;QACF,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,EAAE;QACL,SAAS,CAAC,MAAM;KACnB;IACD,eAAe,EAAE,EAAE;CACtB,CAAC"}
1
+ {"version":3,"file":"abs.js","sourceRoot":"","sources":["../../../../src/function-configs/numeric/abs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAEH,WAAW,EACX,sBAAsB,EACtB,0BAA0B,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,CAAC,MAAM,SAAS,GAAyB;IAC3C,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,sBAAsB,CAAC,eAAe;IAC5C,YAAY,EAAE,WAAW,CAAC,iBAAiB;IAC3C,QAAQ,EAAE,0BAA0B,CAAC,OAAO;IAC5C,WAAW,EAAE,yCAAyC;IACtD,QAAQ,EAAE;QACN;YACI,IAAI,EAAE,EAAE;YACR,MAAM,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE;aAClD;YACD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC,CAAC;YACT,MAAM,EAAE,CAAC;SACZ;KACJ;IACD,MAAM;QACF,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,iFAAiF;IACjF,GAAG,EAAE;QACD,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,KAAK,GAAG,CAAC;KAC3D;IACD,OAAO,EAAE;QACL,SAAS,CAAC,MAAM;KACnB;IACD,eAAe,EAAE,EAAE;CACtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"acos.d.ts","sourceRoot":"","sources":["../../../../src/function-configs/numeric/acos.ts"],"names":[],"mappings":"AACA,OAAO,EACH,oBAAoB,EAIvB,MAAM,kBAAkB,CAAC;AAG1B,eAAO,MAAM,UAAU,EAAE,oBAiCxB,CAAC"}
1
+ {"version":3,"file":"acos.d.ts","sourceRoot":"","sources":["../../../../src/function-configs/numeric/acos.ts"],"names":[],"mappings":"AACA,OAAO,EACH,oBAAoB,EAIvB,MAAM,kBAAkB,CAAC;AAI1B,eAAO,MAAM,UAAU,EAAE,oBA4CxB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { FieldType } from '@terascope/types';
2
2
  import { ProcessMode, FunctionDefinitionType, FunctionDefinitionCategory, } from '../interfaces.js';
3
+ import { finiteOrNull, inDomain } from '../sql-helpers.js';
3
4
  import { runMathFn } from './utils.js';
4
5
  export const acosConfig = {
5
6
  name: 'acos',
@@ -22,6 +23,17 @@ export const acosConfig = {
22
23
  create() {
23
24
  return runMathFn(Math.acos);
24
25
  },
26
+ /**
27
+ * `acos`, with its domain checked first.
28
+ *
29
+ * `Math.acos` outside [-1, 1] is NaN, which becomes null; DuckDB raises an error instead.
30
+ */
31
+ sql: {
32
+ // DuckDB and V8 can differ in the last bit of a transcendental result, which
33
+ // IEEE 754 allows, so `approximate` compares results to within a few ULP
34
+ approximate: true,
35
+ expression: ({ value }) => finiteOrNull(inDomain(`abs(${value}) <= 1`, `acos(${value})`)),
36
+ },
25
37
  accepts: [
26
38
  FieldType.Number,
27
39
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"acos.js","sourceRoot":"","sources":["../../../../src/function-configs/numeric/acos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAEH,WAAW,EACX,sBAAsB,EACtB,0BAA0B,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,CAAC,MAAM,UAAU,GAAyB;IAC5C,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,sBAAsB,CAAC,eAAe;IAC5C,YAAY,EAAE,WAAW,CAAC,iBAAiB;IAC3C,QAAQ,EAAE,0BAA0B,CAAC,OAAO;IAC5C,WAAW,EAAE,wEAAwE;IACrF,QAAQ,EAAE;QACN;YACI,IAAI,EAAE,EAAE;YACR,MAAM,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE;aACnD;YACD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC,CAAC;YACT,MAAM,EAAE,IAAI,CAAC,EAAE;SAClB;KACJ;IACD,MAAM;QACF,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,EAAE;QACL,SAAS,CAAC,MAAM;KACnB;IACD,eAAe,EAAE,EAAE;IACnB,WAAW,CAAC,EAAE,YAAY,EAAE;QACxB,OAAO;YACH,YAAY,EAAE;gBACV,GAAG,YAAY;gBACf,IAAI,EAAE,SAAS,CAAC,KAAK;aACxB;SACJ,CAAC;IACN,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"acos.js","sourceRoot":"","sources":["../../../../src/function-configs/numeric/acos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAEH,WAAW,EACX,sBAAsB,EACtB,0BAA0B,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,CAAC,MAAM,UAAU,GAAyB;IAC5C,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,sBAAsB,CAAC,eAAe;IAC5C,YAAY,EAAE,WAAW,CAAC,iBAAiB;IAC3C,QAAQ,EAAE,0BAA0B,CAAC,OAAO;IAC5C,WAAW,EAAE,wEAAwE;IACrF,QAAQ,EAAE;QACN;YACI,IAAI,EAAE,EAAE;YACR,MAAM,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE;aACnD;YACD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC,CAAC;YACT,MAAM,EAAE,IAAI,CAAC,EAAE;SAClB;KACJ;IACD,MAAM;QACF,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IACD;;;;MAIE;IACF,GAAG,EAAE;QACD,6EAA6E;QAC7E,yEAAyE;QACzE,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,QAAQ,KAAK,GAAG,CAAC,CAAC;KAC5F;IACD,OAAO,EAAE;QACL,SAAS,CAAC,MAAM;KACnB;IACD,eAAe,EAAE,EAAE;IACnB,WAAW,CAAC,EAAE,YAAY,EAAE;QACxB,OAAO;YACH,YAAY,EAAE;gBACV,GAAG,YAAY;gBACf,IAAI,EAAE,SAAS,CAAC,KAAK;aACxB;SACJ,CAAC;IACN,CAAC;CACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"acosh.d.ts","sourceRoot":"","sources":["../../../../src/function-configs/numeric/acosh.ts"],"names":[],"mappings":"AACA,OAAO,EACH,oBAAoB,EAIvB,MAAM,kBAAkB,CAAC;AAG1B,eAAO,MAAM,WAAW,EAAE,oBA4CzB,CAAC"}
1
+ {"version":3,"file":"acosh.d.ts","sourceRoot":"","sources":["../../../../src/function-configs/numeric/acosh.ts"],"names":[],"mappings":"AACA,OAAO,EACH,oBAAoB,EAIvB,MAAM,kBAAkB,CAAC;AAI1B,eAAO,MAAM,WAAW,EAAE,oBAuDzB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { FieldType } from '@terascope/types';
2
2
  import { ProcessMode, FunctionDefinitionType, FunctionDefinitionCategory, } from '../interfaces.js';
3
+ import { finiteOrNull, inDomain } from '../sql-helpers.js';
3
4
  import { runMathFn } from './utils.js';
4
5
  export const acoshConfig = {
5
6
  name: 'acosh',
@@ -33,6 +34,17 @@ export const acoshConfig = {
33
34
  create() {
34
35
  return runMathFn(Math.acosh);
35
36
  },
37
+ /**
38
+ * `acosh`, with its domain checked first.
39
+ *
40
+ * `Math.acosh` below 1 is NaN, which becomes null; DuckDB raises an error instead.
41
+ */
42
+ sql: {
43
+ // DuckDB and V8 can differ in the last bit of a transcendental result, which
44
+ // IEEE 754 allows, so `approximate` compares results to within a few ULP
45
+ approximate: true,
46
+ expression: ({ value }) => finiteOrNull(inDomain(`${value} >= 1`, `acosh(${value})`)),
47
+ },
36
48
  accepts: [
37
49
  FieldType.Number,
38
50
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"acosh.js","sourceRoot":"","sources":["../../../../src/function-configs/numeric/acosh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAEH,WAAW,EACX,sBAAsB,EACtB,0BAA0B,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC7C,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,sBAAsB,CAAC,eAAe;IAC5C,YAAY,EAAE,WAAW,CAAC,iBAAiB;IAC3C,QAAQ,EAAE,0BAA0B,CAAC,OAAO;IAC5C,WAAW,EAAE,wGAAwG;IACrH,QAAQ,EAAE;QACN;YACI,IAAI,EAAE,EAAE;YACR,MAAM,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE;aACnD;YACD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;SACZ;QACD;YACI,IAAI,EAAE,EAAE;YACR,MAAM,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE;aACnD;YACD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,+FAA+F;SAC/G;KACJ;IACD,MAAM;QACF,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,EAAE;QACL,SAAS,CAAC,MAAM;KACnB;IACD,eAAe,EAAE,EAAE;IACnB,WAAW,CAAC,EAAE,YAAY,EAAE;QACxB,OAAO;YACH,YAAY,EAAE;gBACV,GAAG,YAAY;gBACf,IAAI,EAAE,SAAS,CAAC,KAAK;aACxB;SACJ,CAAC;IACN,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"acosh.js","sourceRoot":"","sources":["../../../../src/function-configs/numeric/acosh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAEH,WAAW,EACX,sBAAsB,EACtB,0BAA0B,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC7C,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,sBAAsB,CAAC,eAAe;IAC5C,YAAY,EAAE,WAAW,CAAC,iBAAiB;IAC3C,QAAQ,EAAE,0BAA0B,CAAC,OAAO;IAC5C,WAAW,EAAE,wGAAwG;IACrH,QAAQ,EAAE;QACN;YACI,IAAI,EAAE,EAAE;YACR,MAAM,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE;aACnD;YACD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;SACZ;QACD;YACI,IAAI,EAAE,EAAE;YACR,MAAM,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE;aACnD;YACD,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,+FAA+F;SAC/G;KACJ;IACD,MAAM;QACF,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD;;;;MAIE;IACF,GAAG,EAAE;QACD,6EAA6E;QAC7E,yEAAyE;QACzE,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,KAAK,OAAO,EAAE,SAAS,KAAK,GAAG,CAAC,CAAC;KACxF;IACD,OAAO,EAAE;QACL,SAAS,CAAC,MAAM;KACnB;IACD,eAAe,EAAE,EAAE;IACnB,WAAW,CAAC,EAAE,YAAY,EAAE;QACxB,OAAO;YACH,YAAY,EAAE;gBACV,GAAG,YAAY;gBACf,IAAI,EAAE,SAAS,CAAC,KAAK;aACxB;SACJ,CAAC;IACN,CAAC;CACJ,CAAC"}