@xano/sdk 1.0.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 (336) hide show
  1. package/CHANGELOG.md +788 -0
  2. package/LICENSE +21 -0
  3. package/README.md +541 -0
  4. package/dist/.build-fingerprint +1 -0
  5. package/dist/agent-file-refresh-ZEMK33AX.js +38 -0
  6. package/dist/answer-shape-K67TAAPY.js +33 -0
  7. package/dist/backend-dir-2U53CIAL.js +39 -0
  8. package/dist/backend-slot-7QXW2QYC.js +28 -0
  9. package/dist/bin.d.ts +1 -0
  10. package/dist/bin.js +255 -0
  11. package/dist/branch-NCRNWQBQ.js +61 -0
  12. package/dist/branch-commands-ACIRCEQJ.js +79 -0
  13. package/dist/bundle.d.ts +223 -0
  14. package/dist/bundle.js +153 -0
  15. package/dist/capture-WAXPD7DR.js +41 -0
  16. package/dist/chunk-27GWNP2I.js +23 -0
  17. package/dist/chunk-2CMJZDCL.js +177 -0
  18. package/dist/chunk-2EZ3ZJZZ.js +302 -0
  19. package/dist/chunk-2GNFDZA2.js +390 -0
  20. package/dist/chunk-2MNLRIOX.js +11 -0
  21. package/dist/chunk-2TFRR6JV.js +104 -0
  22. package/dist/chunk-2ZUEE4EK.js +408 -0
  23. package/dist/chunk-36JUQZVQ.js +22 -0
  24. package/dist/chunk-3DRXWLJ5.js +83 -0
  25. package/dist/chunk-3JDU4VRL.js +137 -0
  26. package/dist/chunk-3KZCLN4Z.js +241 -0
  27. package/dist/chunk-3LDULPRE.js +168 -0
  28. package/dist/chunk-3M4LFYNQ.js +111 -0
  29. package/dist/chunk-3XI5CTUE.js +22 -0
  30. package/dist/chunk-3YW23UFH.js +50 -0
  31. package/dist/chunk-45UIT5T2.js +862 -0
  32. package/dist/chunk-4BW2SG2N.js +46 -0
  33. package/dist/chunk-4KHEMC32.js +79 -0
  34. package/dist/chunk-4POWHT2K.js +321 -0
  35. package/dist/chunk-4Q2GN7NW.js +192 -0
  36. package/dist/chunk-5A2PLKZB.js +70 -0
  37. package/dist/chunk-5FBYXK5P.js +159 -0
  38. package/dist/chunk-5HVXPTU4.js +323 -0
  39. package/dist/chunk-5QU2P5CA.js +304 -0
  40. package/dist/chunk-5V5XU32D.js +191 -0
  41. package/dist/chunk-5ZSO4T2G.js +10 -0
  42. package/dist/chunk-622HUCZT.js +10 -0
  43. package/dist/chunk-65HWOMGV.js +177 -0
  44. package/dist/chunk-6ELFRN3P.js +365 -0
  45. package/dist/chunk-6HO3NCSJ.js +1055 -0
  46. package/dist/chunk-6IUMKYWI.js +457 -0
  47. package/dist/chunk-6KEB3C3U.js +65 -0
  48. package/dist/chunk-6MR5TI5V.js +987 -0
  49. package/dist/chunk-6NNTNXN7.js +157 -0
  50. package/dist/chunk-6PBR37LN.js +97 -0
  51. package/dist/chunk-6QXLMMT3.js +155 -0
  52. package/dist/chunk-6ZGJCBZS.js +224 -0
  53. package/dist/chunk-73IVBKMA.js +250 -0
  54. package/dist/chunk-7G3CTU7I.js +286 -0
  55. package/dist/chunk-A3UDOZB6.js +222 -0
  56. package/dist/chunk-A6E77GDW.js +85 -0
  57. package/dist/chunk-AHJWCYQO.js +660 -0
  58. package/dist/chunk-AKNCFVKZ.js +36 -0
  59. package/dist/chunk-AM4FKL4J.js +237 -0
  60. package/dist/chunk-AN6BL47T.js +26 -0
  61. package/dist/chunk-AOSYVMUS.js +147 -0
  62. package/dist/chunk-APWXY5SL.js +182 -0
  63. package/dist/chunk-AWEIIR2U.js +218 -0
  64. package/dist/chunk-AWQ7BQTQ.js +73 -0
  65. package/dist/chunk-BAUZOWGX.js +393 -0
  66. package/dist/chunk-BHACRS6R.js +940 -0
  67. package/dist/chunk-BWPNT55T.js +680 -0
  68. package/dist/chunk-C6RIMRU4.js +187 -0
  69. package/dist/chunk-CGVQZXYG.js +263 -0
  70. package/dist/chunk-CIMQZRRE.js +162 -0
  71. package/dist/chunk-CJHQKJU4.js +113 -0
  72. package/dist/chunk-CTMO46PK.js +1897 -0
  73. package/dist/chunk-D53J55C5.js +106 -0
  74. package/dist/chunk-D7VGG3WS.js +90 -0
  75. package/dist/chunk-DAD3ONIS.js +245 -0
  76. package/dist/chunk-DGWHAVRG.js +162 -0
  77. package/dist/chunk-DX4QR4B2.js +483 -0
  78. package/dist/chunk-EHP3WPEG.js +21 -0
  79. package/dist/chunk-ELP2HMXC.js +432 -0
  80. package/dist/chunk-ERVIASGL.js +21 -0
  81. package/dist/chunk-ET4Y4XCB.js +865 -0
  82. package/dist/chunk-ETO6LGLD.js +4750 -0
  83. package/dist/chunk-EUUUMY7J.js +24 -0
  84. package/dist/chunk-FQJ2TTHP.js +218 -0
  85. package/dist/chunk-FQOF7E2E.js +133 -0
  86. package/dist/chunk-FWD7AL6N.js +21 -0
  87. package/dist/chunk-FXFV3KU6.js +138 -0
  88. package/dist/chunk-FXRQOWTE.js +171 -0
  89. package/dist/chunk-G554NZNI.js +210 -0
  90. package/dist/chunk-GSGDWJB5.js +13 -0
  91. package/dist/chunk-H2V3N23D.js +66 -0
  92. package/dist/chunk-H5C7MBCR.js +159 -0
  93. package/dist/chunk-HHN734BU.js +371 -0
  94. package/dist/chunk-HRVBLCVJ.js +243 -0
  95. package/dist/chunk-HVRUQXGD.js +1264 -0
  96. package/dist/chunk-I4F5TCJH.js +130 -0
  97. package/dist/chunk-IDOTCMDV.js +57 -0
  98. package/dist/chunk-IGOLHKWF.js +427 -0
  99. package/dist/chunk-JGE7CAWB.js +148 -0
  100. package/dist/chunk-JTUKLCXS.js +92 -0
  101. package/dist/chunk-JZGVVJSI.js +66 -0
  102. package/dist/chunk-K4WX6UUU.js +923 -0
  103. package/dist/chunk-K5BBGTYZ.js +217 -0
  104. package/dist/chunk-K6RXBGUB.js +427 -0
  105. package/dist/chunk-KTSDSD36.js +165 -0
  106. package/dist/chunk-L5JYN3NM.js +1038 -0
  107. package/dist/chunk-LIEOKXKD.js +354 -0
  108. package/dist/chunk-LLNZGEFK.js +51 -0
  109. package/dist/chunk-LPECSJ2J.js +55 -0
  110. package/dist/chunk-LQCMKAJ7.js +413 -0
  111. package/dist/chunk-LRN4ZJCQ.js +1145 -0
  112. package/dist/chunk-MJ4ZVHKN.js +17 -0
  113. package/dist/chunk-MXHSQOC4.js +3061 -0
  114. package/dist/chunk-N5GKCWE5.js +367 -0
  115. package/dist/chunk-NA3PXMEF.js +10 -0
  116. package/dist/chunk-NAQDMEHV.js +76 -0
  117. package/dist/chunk-NWKXM5RD.js +109 -0
  118. package/dist/chunk-NZOWWHU5.js +196 -0
  119. package/dist/chunk-OHX6MIUZ.js +184 -0
  120. package/dist/chunk-OOXWYAA4.js +15 -0
  121. package/dist/chunk-OPHB5ORL.js +1990 -0
  122. package/dist/chunk-OXA6PSZT.js +1725 -0
  123. package/dist/chunk-P2HAGF6H.js +73 -0
  124. package/dist/chunk-PTHVMXZI.js +3036 -0
  125. package/dist/chunk-PZ5AY32C.js +10 -0
  126. package/dist/chunk-Q325JKYB.js +189 -0
  127. package/dist/chunk-Q7DGTQ5G.js +255 -0
  128. package/dist/chunk-QCNYHBL7.js +601 -0
  129. package/dist/chunk-QO6BVGS5.js +145 -0
  130. package/dist/chunk-QXTKSOFI.js +76 -0
  131. package/dist/chunk-ROY4YAEQ.js +66 -0
  132. package/dist/chunk-RTJRZFFY.js +447 -0
  133. package/dist/chunk-SAVJUS2X.js +128 -0
  134. package/dist/chunk-SFLHVCKX.js +173 -0
  135. package/dist/chunk-STSFNCY4.js +127 -0
  136. package/dist/chunk-SWBF2LTK.js +170 -0
  137. package/dist/chunk-T5KELPAR.js +109 -0
  138. package/dist/chunk-TFFGOFVZ.js +1481 -0
  139. package/dist/chunk-TLHIFK4M.js +256 -0
  140. package/dist/chunk-TLQE7ZN3.js +156 -0
  141. package/dist/chunk-TPHWJ7UG.js +1981 -0
  142. package/dist/chunk-TRJCALW3.js +291 -0
  143. package/dist/chunk-TTEIYD5P.js +133 -0
  144. package/dist/chunk-U64O2MXY.js +407 -0
  145. package/dist/chunk-UCQ2VUTG.js +630 -0
  146. package/dist/chunk-UTI5G6OJ.js +44 -0
  147. package/dist/chunk-UVHDMMIP.js +188 -0
  148. package/dist/chunk-UZ6QQWJT.js +120 -0
  149. package/dist/chunk-VAX3UZOY.js +686 -0
  150. package/dist/chunk-W3HBUKFO.js +57 -0
  151. package/dist/chunk-WKQLGKCL.js +2823 -0
  152. package/dist/chunk-WQFNASK4.js +560 -0
  153. package/dist/chunk-WRBKLYSJ.js +224 -0
  154. package/dist/chunk-WTPZRR4I.js +17 -0
  155. package/dist/chunk-WZDJ2LLX.js +2385 -0
  156. package/dist/chunk-X2NL4KUO.js +14 -0
  157. package/dist/chunk-X4DVXBFY.js +38 -0
  158. package/dist/chunk-X677DMZM.js +7050 -0
  159. package/dist/chunk-XBKMWY7F.js +612 -0
  160. package/dist/chunk-XNCP4KYO.js +78 -0
  161. package/dist/chunk-XVBGLISP.js +35 -0
  162. package/dist/chunk-XW6KISBB.js +1192 -0
  163. package/dist/chunk-YGZHHAAB.js +8156 -0
  164. package/dist/chunk-YHEFQUQB.js +186 -0
  165. package/dist/chunk-YLDALTWZ.js +653 -0
  166. package/dist/chunk-YU4HSQW7.js +229 -0
  167. package/dist/chunk-ZDPP6RKB.js +27 -0
  168. package/dist/chunk-ZFDZKNGG.js +194 -0
  169. package/dist/chunk-ZIY7RNUT.js +49 -0
  170. package/dist/chunk-ZYJP6BOO.js +30 -0
  171. package/dist/cli.d.ts +1111 -0
  172. package/dist/cli.js +165 -0
  173. package/dist/codegen-command-VR2GWR6C.js +173 -0
  174. package/dist/codegen.d.ts +115 -0
  175. package/dist/codegen.js +19 -0
  176. package/dist/commands-GJMJ4XYZ.js +76 -0
  177. package/dist/completion-ZQLO6PB6.js +738 -0
  178. package/dist/config-MBYGCAFK.js +136 -0
  179. package/dist/deploy-command-JVZPWHMK.js +180 -0
  180. package/dist/deploy-source-3W45CXMP.js +81 -0
  181. package/dist/dev-env-sync-HN44K4D5.js +188 -0
  182. package/dist/diagnostics-UEAAHWVF.js +30 -0
  183. package/dist/display-name-hint-ABBPVQIR.js +46 -0
  184. package/dist/emit-CyhBDxli.d.ts +7007 -0
  185. package/dist/env-example-refresh-ET5HMMDW.js +126 -0
  186. package/dist/env-pull-command-TNMNB3CV.js +323 -0
  187. package/dist/env-target-O4HRKTGZ.js +40 -0
  188. package/dist/env-var-command-ZIRDCAZA.js +427 -0
  189. package/dist/ephemeral-P7F3PMAD.js +54 -0
  190. package/dist/ephemeral-command-CLJJKOFT.js +592 -0
  191. package/dist/ephemeral-state-PYCBSOGX.js +61 -0
  192. package/dist/file-lock-PT74GWYW.js +10 -0
  193. package/dist/generate-command-AYEOLA26.js +510 -0
  194. package/dist/gitignore-3SJ3WNRG.js +51 -0
  195. package/dist/guards-4EBNCZDC.js +162 -0
  196. package/dist/hosted-file-PSHJB3HX.js +28 -0
  197. package/dist/impersonate-command-5JAS3WSV.js +152 -0
  198. package/dist/import-EQSFU6JC.js +19 -0
  199. package/dist/index.d.ts +5470 -0
  200. package/dist/index.js +371 -0
  201. package/dist/init-command-X2FR4UAK.js +125 -0
  202. package/dist/init-modules-RY7UHAOL.js +50 -0
  203. package/dist/init-web-M4YZSZK6.js +42 -0
  204. package/dist/internal.d.ts +179 -0
  205. package/dist/internal.js +2634 -0
  206. package/dist/io-RC56QSN5.js +26 -0
  207. package/dist/keep-data-merge-7MPLVAVI.js +1119 -0
  208. package/dist/lambda-config-reconcile-OUZ4OYAB.js +116 -0
  209. package/dist/landed-753YLJ5H.js +40 -0
  210. package/dist/landing-record-SU52SKXU.js +61 -0
  211. package/dist/live-diff-YONW2VI3.js +65 -0
  212. package/dist/local-engine-choice-CH5X3W7E.js +79 -0
  213. package/dist/local-engine-command-Z3OL7VOD.js +766 -0
  214. package/dist/local-engine-config-5U3SC434.js +39 -0
  215. package/dist/local-engine-deploy-PCQ4SNPB.js +39 -0
  216. package/dist/local-engine-process-EHTE5LLU.js +63 -0
  217. package/dist/local-engine-state-A4FTRFAF.js +32 -0
  218. package/dist/local-engine-update-check-6L645VBL.js +162 -0
  219. package/dist/lock-MRRHW5GS.js +87 -0
  220. package/dist/lock-commands-2QG25HL7.js +963 -0
  221. package/dist/login-command-QPYRWOXZ.js +538 -0
  222. package/dist/logout-command-WOIQLDP6.js +56 -0
  223. package/dist/loop-ALIZLOSX.js +191 -0
  224. package/dist/marketplace-command-K5YL42NO.js +977 -0
  225. package/dist/marketplace-resolve-LY32JES5.js +40 -0
  226. package/dist/meta-client-YXGPW53C.js +244 -0
  227. package/dist/module-manifest-JFGHU2TC.js +38 -0
  228. package/dist/near-key.d.ts +13 -0
  229. package/dist/near-key.js +8 -0
  230. package/dist/node.d.ts +95 -0
  231. package/dist/node.js +969 -0
  232. package/dist/operation-outcome-TZSESNC7.js +51 -0
  233. package/dist/output-target-AL3I44GG.js +47 -0
  234. package/dist/package-manager-PRAHUSCN.js +34 -0
  235. package/dist/plan-disclosure-6G4MLZKD.js +114 -0
  236. package/dist/plugin-contributions-WRNY5ABG.js +28 -0
  237. package/dist/plugin-prompt-4VA3B4FF.js +20 -0
  238. package/dist/plugin-questions-JTSYA74Q.js +24 -0
  239. package/dist/plugin.d.ts +396 -0
  240. package/dist/plugin.js +1 -0
  241. package/dist/preflight-command-2T5Z36MI.js +321 -0
  242. package/dist/profile-command-AH3PIM4X.js +800 -0
  243. package/dist/profile-pointer-GRWJU3YD.js +31 -0
  244. package/dist/profile-select-74TRDEPD.js +23 -0
  245. package/dist/project-dependency-KSH63ODT.js +35 -0
  246. package/dist/project-sdk-REPPOIBD.js +24 -0
  247. package/dist/promote-command-PCWT5N6S.js +140 -0
  248. package/dist/prompt-II3F3LND.js +27 -0
  249. package/dist/publish-command-TTDUUJI5.js +414 -0
  250. package/dist/pull-command-VBO7C4S3.js +161 -0
  251. package/dist/pull-superseded-GJWLG7XO.js +20 -0
  252. package/dist/release-command-N4ZPKMHR.js +146 -0
  253. package/dist/release-ns-command-3KFDMZ6G.js +1745 -0
  254. package/dist/response-HlXahv4K.d.ts +925 -0
  255. package/dist/retry-command-AS5EVREX.js +34 -0
  256. package/dist/routes-manifest-SNWUVBT6.js +43 -0
  257. package/dist/runtime-XETHVF33.js +14 -0
  258. package/dist/scaffold.d.ts +1911 -0
  259. package/dist/scaffold.js +107 -0
  260. package/dist/secrets-file-LVZD6IIM.js +56 -0
  261. package/dist/secrets-fill-command-TTCPSVXN.js +218 -0
  262. package/dist/seed-VU7C3QYS.js +46 -0
  263. package/dist/sent-writes-N7X4OVXT.js +22 -0
  264. package/dist/source-resolve-S2XA3XZF.js +83 -0
  265. package/dist/static-host-B2Y6AG3W.js +352 -0
  266. package/dist/status-command-RUDXTF7I.js +554 -0
  267. package/dist/store-6VNCD4D7.js +20 -0
  268. package/dist/store-ARM6VMO5.js +98 -0
  269. package/dist/store-DuYfzKlW.d.ts +3144 -0
  270. package/dist/suggest-6FOOYKHG.js +12 -0
  271. package/dist/sveltekit.d.ts +154 -0
  272. package/dist/sveltekit.js +109 -0
  273. package/dist/sync-contributions-UCEROO26.js +415 -0
  274. package/dist/table-ENAVMITR.js +42 -0
  275. package/dist/tables-command-GUPXXSB5.js +156 -0
  276. package/dist/tenant-IIHPOHGP.js +42 -0
  277. package/dist/tenant-command-D5HGI2X4.js +965 -0
  278. package/dist/test-command-TIKZMDPZ.js +476 -0
  279. package/dist/tests-BGGIOK3L.js +26 -0
  280. package/dist/token-NICJUTMT.js +72 -0
  281. package/dist/toolchain-hooks-GHKLUJOH.js +96 -0
  282. package/dist/toolchain-modules-5EAZUONB.js +24 -0
  283. package/dist/tracked-backend-EIBUMDZA.js +80 -0
  284. package/dist/update-check-2W2NLDTC.js +136 -0
  285. package/dist/upgrade-command-QHNFWM7O.js +531 -0
  286. package/dist/verify-rollout-DRCK5TDD.js +61 -0
  287. package/dist/whoami-command-STGINTXH.js +51 -0
  288. package/dist/workspace-2CLHU2LK.js +93 -0
  289. package/dist/workspace-binding-56PIIPCP.js +54 -0
  290. package/dist/workspace-command-JEXQETJD.js +535 -0
  291. package/dist/workspace-env-F2RFMSC5.js +70 -0
  292. package/dist/workspace-export-OJSH2HIW.js +21 -0
  293. package/dist/writable-VA7OISSK.js +25 -0
  294. package/dist/xano-ICFUSPFR.js +42 -0
  295. package/dist/xanosdk-import-GN42TO2B.js +56 -0
  296. package/dist/xanosdk-project-S6DXJONQ.js +41 -0
  297. package/dist/xdo-CxDr2Q1C.d.ts +1371 -0
  298. package/guides/README.md +33 -0
  299. package/guides/authoring.md +921 -0
  300. package/guides/cli.md +401 -0
  301. package/guides/codegen.md +177 -0
  302. package/guides/codes.md +404 -0
  303. package/guides/coverage.md +74 -0
  304. package/guides/deploying.md +1525 -0
  305. package/guides/environment.md +400 -0
  306. package/guides/marketplace.md +415 -0
  307. package/guides/module-contract.md +558 -0
  308. package/guides/object-kinds.md +433 -0
  309. package/guides/project-structure.md +43 -0
  310. package/guides/scaffold.md +351 -0
  311. package/guides/typed-frontend.md +242 -0
  312. package/llms/client.md +63 -0
  313. package/llms/errors.md +56 -0
  314. package/llms/fields.md +176 -0
  315. package/llms/filters.md +183 -0
  316. package/llms/kinds-agent-mcp.md +30 -0
  317. package/llms/kinds-core.md +100 -0
  318. package/llms/kinds-knowledge.md +20 -0
  319. package/llms/kinds-realtime.md +76 -0
  320. package/llms/lambda.md +94 -0
  321. package/llms/legacy.md +44 -0
  322. package/llms/lock.md +40 -0
  323. package/llms/object-kinds.md +34 -0
  324. package/llms/statements-calls.md +62 -0
  325. package/llms/statements-catalog.md +320 -0
  326. package/llms/statements-data.md +66 -0
  327. package/llms/statements-runtime.md +68 -0
  328. package/llms/tests.md +59 -0
  329. package/llms/toolchain.md +16 -0
  330. package/llms/triggers.md +36 -0
  331. package/llms/values.md +29 -0
  332. package/llms-full.txt +2085 -0
  333. package/llms.txt +493 -0
  334. package/manifest.json +11224 -0
  335. package/package.json +162 -0
  336. package/types/lambda-globals.d.ts +129 -0
@@ -0,0 +1,1055 @@
1
+ import {
2
+ LAMBDA_CODE_FILTERS,
3
+ c,
4
+ filter,
5
+ isTaggedValue,
6
+ toLambdaValue
7
+ } from "./chunk-OXA6PSZT.js";
8
+
9
+ // src/values/generated/filters.generated.ts
10
+ var v = (x) => {
11
+ if (typeof x === "string") return c.text(x);
12
+ if (typeof x === "number") return Number.isInteger(x) ? c.int(x) : c.decimal(x);
13
+ if (typeof x === "boolean") return c.bool(x);
14
+ return x;
15
+ };
16
+ var slotted = (name, argNames, required, capped = true) => (...args) => {
17
+ const surface = LAMBDA_CODE_FILTERS[name]?.surface;
18
+ const body = (x) => surface === void 0 ? x : toLambdaValue(x, surface, `fl.${name}`);
19
+ const first = args[0];
20
+ const isNamed = args.length === 1 && typeof first === "object" && first !== null && !Array.isArray(first) && !isTaggedValue(first);
21
+ if (!isNamed) {
22
+ const supplied = args.map(body);
23
+ const got = supplied.filter((a) => a !== void 0).length;
24
+ assertArity(name, argNames, required, got);
25
+ if (capped) assertMaxArity(name, argNames, got);
26
+ return filter(name, ...supplied.map(v));
27
+ }
28
+ const named = Object.fromEntries(
29
+ Object.entries(first).map(([k, x]) => [k, body(x)])
30
+ );
31
+ const unknownArg = Object.keys(named).find((k) => !argNames.includes(k));
32
+ if (unknownArg !== void 0) {
33
+ throw new Error(
34
+ `fl.${name} has no argument \`${unknownArg}\` \u2014 it takes ${argNames.length === 0 ? "none" : argNames.join(", ")}. A name the filter does not declare is dropped rather than sent, so this would read as an omission instead of a typo.`
35
+ );
36
+ }
37
+ const last = argNames.reduce((acc, n, i) => named[n] !== void 0 ? i : acc, -1);
38
+ const hole = argNames.slice(0, last).findIndex((n) => named[n] === void 0);
39
+ if (hole !== -1) {
40
+ throw new Error(
41
+ `fl.${name}: \`${argNames[hole]}\` is omitted but \`${argNames[last]}\` is supplied. Filter arguments are positional even in this form \u2014 the engine reads them by slot, so one in the middle cannot be skipped. Supply \`${argNames[hole]}\` too.`
42
+ );
43
+ }
44
+ assertArity(name, argNames, required, last + 1);
45
+ return filter(name, ...argNames.map((n) => v(named[n])));
46
+ };
47
+ var assertArity = (name, argNames, required, got) => {
48
+ if (got >= required) return;
49
+ throw new Error(
50
+ `fl.${name} needs ${required} argument(s) \u2014 ${argNames.slice(0, required).join(", ")} \u2014 but got ${got}. Filter arguments are positional and the engine refuses a short call, so a missing one cannot be inferred \u2014 not even where the filter's own documentation calls it optional. Some filters accept omission from the END and some require every argument regardless; which is which is probed, not declared.`
51
+ );
52
+ };
53
+ var assertMaxArity = (name, argNames, got) => {
54
+ if (got <= argNames.length) return;
55
+ throw new Error(
56
+ `fl.${name} takes ${argNames.length} argument(s) \u2014 ${argNames.join(", ")} \u2014 but got ${got}. The extra one is not sent anywhere useful: it rides into the filter's arg list, where the engine either ignores it or fails opaquely at runtime. Drop it, or \u2014 if this filter really does accept more than the catalog declares \u2014 write it untyped as \`filter("${name}", \u2026)\`.`
57
+ );
58
+ };
59
+ var FILTER_NAMES = ["abs", "acos", "acosh", "add", "addslashes", "append", "array_diff", "array_diff_assoc", "array_entries", "array_fill", "array_fill_keys", "array_filter", "array_find", "array_has", "array_intersect", "array_intersect_assoc", "array_keys", "array_lower", "array_merge", "array_merge_recursive", "array_pop", "array_push", "array_push_conditional", "array_remove", "array_replace", "array_set", "array_shift", "array_shuffle", "array_slice", "array_unshift", "array_upmerge", "array_values", "asin", "asinh", "atan", "atanh", "avg", "base64_decode", "base64_decode_urlsafe", "base64_encode", "base64_encode_urlsafe", "base_convert", "bin2hex", "bindec", "bitwise_and", "bitwise_not", "bitwise_or", "bitwise_xor", "capitalize", "ceil", "clamp_max", "clamp_min", "concat", "contains", "convert_encoding", "cos", "count", "create_object", "create_object_from_entries", "crypto_jwe_decode", "crypto_jwe_encode", "crypto_jws_decode", "crypto_jws_encode", "csv_create", "csv_decode", "csv_encode", "csv_parse", "decbin", "dechex", "decoct", "decrypt", "deg2rad", "detect_encoding", "div", "empty", "encrypt", "ends_with", "epochms_add_ms", "epochms_add_secs", "epochms_date", "epochms_from_format", "epochms_transform", "eq", "escape", "even", "every", "exp", "filter", "filter_empty", "filter_empty_array", "filter_empty_object", "filter_empty_text", "filter_false", "filter_null", "filter_zero", "find", "findIndex", "first", "first_notempty", "first_notnull", "flatten", "floor", "from_utf8", "fsort", "get", "gt", "gte", "has", "hex2bin", "hexdec", "hmac_md5", "hmac_sha1", "hmac_sha256", "hmac_sha384", "hmac_sha512", "icontains", "iends_with", "in", "index_by", "is_array", "is_bool", "is_decimal", "is_int", "is_object", "is_text", "is_uuid", "istarts_with", "join", "json_decode", "json_encode", "jwe_decode", "jwe_encode", "lambda", "last", "list_encodings", "ln", "log", "log10", "lower", "lt", "lte", "ltrim", "map", "max", "md5", "min", "mod", "ms_to_secs", "mul", "ne", "not", "null", "num_max", "num_min", "number_format", "octdec", "odd", "pick", "pow", "prepend", "product", "querystring_parse", "rad2deg", "range", "reduce", "regex_match", "regex_match_all", "regex_quote", "regex_replace", "regex_test", "reverse", "round", "rsort", "rtrim", "safe_array", "secs_to_ms", "secureid_decode", "secureid_encode", "set", "set_conditional", "set_ifnotempty", "set_ifnotnull", "sha1", "sha256", "sha384", "sha512", "sin", "some", "sort", "splice", "split", "sprintf", "sql_alias", "sql_esc", "sqrt", "starts_with", "string_replace", "strip_accents", "strip_tags", "stripos", "strlen", "strpos", "sub", "substr", "sum", "tan", "text_escape", "text_unescape", "to_bool", "to_decimal", "to_epoch_day", "to_epoch_hour", "to_epoch_minute", "to_epoch_ms", "to_epoch_sec", "to_epochms", "to_expr", "to_geo_linestring", "to_geo_multilinestring", "to_geo_multipoint", "to_geo_multipolygon", "to_geo_point", "to_geo_polygon", "to_int", "to_text", "to_utf8", "transform", "trim", "uid", "unique", "unpick", "unset", "upper", "url_addarg", "url_decode", "url_decode_rfc3986", "url_delarg", "url_encode", "url_encode_rfc3986", "url_getarg", "url_hasarg", "url_parse", "uuid4", "xml_decode", "yaml_decode", "yaml_encode"];
60
+ var FILTER_SPECS = { "deg2rad": { "result": "decimal", "group": "math", "description": "Convert degrees to radians" }, "rad2deg": { "result": "decimal", "group": "math", "description": "Convert radians to degrees" }, "number_format": { "args": [{ "name": "decimals", "type": "int" }, { "name": "decimal_separator", "type": "text" }, { "name": "thousands_separator", "type": "text" }], "result": "string", "group": "math", "description": "Format a number with flexible support over decimal places, thousands separator, and decimal separator." }, "sin": { "result": "decimal", "group": "math", "description": "Calculates the sine of the supplied value in radians" }, "asin": { "result": "decimal", "group": "math", "description": "Calculates the arc sine of the supplied value in radians" }, "asinh": { "result": "decimal", "group": "math", "description": "Calculates the inverse hyperbolic sine of the supplied value in radians" }, "cos": { "result": "decimal", "group": "math", "description": "Calculates the cosine of the supplied value in radians" }, "acos": { "result": "decimal", "group": "math", "description": "Calculates the arc cosine of the supplied value in radians" }, "acosh": { "result": "decimal", "group": "math", "description": "Calculates the inverse hyperbolic cosine of the supplied value in radians" }, "tan": { "result": "decimal", "group": "math", "description": "Calculates the tangent of the supplied value in radians" }, "atan": { "result": "decimal", "group": "math", "description": "Calculates the arc tangent of the supplied value in radians" }, "atanh": { "result": "decimal", "group": "math", "description": "Calculates the inverse hyperbolic tangent of the supplied value in radians" }, "floor": { "result": "int", "group": "math", "description": "Round a decimal down to its integer equivalent" }, "ceil": { "result": "int", "group": "math", "description": "Round a decimal up to its integer equivalent" }, "round": { "args": [{ "name": "precision", "type": "int", "optional": true }], "result": "decimal", "group": "math", "description": "Round a decimal with optional precision" }, "first": { "result": "<T>", "group": "array", "description": "Get the first entry of an array" }, "last": { "result": "<T>", "group": "array", "description": "Get the last entry of an array" }, "count": { "result": "int", "group": "array", "description": "Return the number of items in an object/array" }, "range": { "args": [{ "name": "start", "type": "int" }, { "name": "stop", "type": "int" }], "result": "int[]", "group": "array", "description": "Returns array of values between the specified start/stop." }, "reverse": { "result": "<T>[]", "group": "array", "description": "Returns values of an array in reverse order" }, "unique": { "args": [{ "name": "path", "type": "text", "optional": true }], "result": "<T>[]", "group": "array", "description": "Returns unique values of an array" }, "safe_array": { "result": "<T>[]", "group": "array", "description": "Always returns an array. Uses the existing value if it is an array or creates an array of one element." }, "flatten": { "result": "<T>[]", "group": "array", "description": "Flattens a multidimensional array into a single level array of values." }, "filter_empty": { "args": [{ "name": "path", "type": "text", "optional": true }], "result": "<T>[]", "group": "array", "description": 'Returns a new array with only entries that are not empty ("", null, 0, "0", false, [], {})' }, "filter_empty_text": { "args": [{ "name": "path", "type": "text", "optional": true }], "result": "<T>[]", "group": "array", "description": 'Returns a new array with only entries that are not empty ("", null, 0, "0", false, [], {})' }, "filter_null": { "args": [{ "name": "path", "type": "text", "optional": true }], "result": "<T>[]", "group": "array", "description": "Returns a new array with only entries that are not null" }, "filter_empty_array": { "args": [{ "name": "path", "type": "text", "optional": true }], "result": "<T>[]", "group": "array", "description": "Returns a new array with only entries that are not an empty array `[]`" }, "filter_empty_object": { "args": [{ "name": "path", "type": "text", "optional": true }], "result": "<T>[]", "group": "array", "description": "Returns a new array with only entries that are not an empty object `{}`" }, "filter_zero": { "args": [{ "name": "path", "type": "text", "optional": true }], "result": "<T>[]", "group": "array", "description": "Returns a new array with only entries that are not zero" }, "filter_false": { "args": [{ "name": "path", "type": "text", "optional": true }], "result": "<T>[]", "group": "array", "description": "Returns a new array with only entries that are not false" }, "sort": { "description": 'Sort an array of elements with an optional path inside the element Takes NO arguments: a plain ascending sort of the whole value (mixed types compare loosely, and arrays of objects by size first). To sort by a key, a type or a direction use `fl.fsort(path, type, asc)` \u2014 that is also what XanoScript\'s `|sort:\u2026` means. Prefer `fl.fsort` (`fl.fsort("", "number")` for numbers): a workspace saved through the XanoScript editor turns a stored `sort` into `fsort` with its text-order defaults.' }, "index_by": { "args": [{ "name": "path", "type": "text" }], "result": "{ [key: string]: <T>[] }", "group": "array", "description": "Groups the piped array into an OBJECT keyed by each item's path \u2014 every value is an ARRAY of the items sharing that key, even when only one item does. So a lookup reads `idx[key][0]`, not `idx[key]`; the singular spelling yields null rather than erroring. Items whose path is missing or non-scalar are dropped." }, "append": { "args": [{ "name": "value", "type": "<T>" }, { "name": "path", "type": "text" }], "result": "<T>[]", "group": "array", "description": "Push an element on to the end of an array within an object and return the updated object" }, "prepend": { "args": [{ "name": "value", "type": "<T>" }, { "name": "path", "type": "text" }], "result": "<T>[]", "group": "array", "description": "Push an element on to the beginning of an array within an object and return the updated object" }, "abs": { "result": "decimal", "group": "math", "description": "Returns the absolute value" }, "sqrt": { "result": "decimal", "group": "math", "description": "Returns the square root of the value" }, "exp": { "result": "decimal", "group": "math", "description": 'Returns the exponent of mathematical expression "e"' }, "log": { "args": [{ "name": "base", "type": "<T>" }], "result": "decimal", "group": "math", "description": "Returns the logarithm with a custom base" }, "log10": { "result": "decimal", "group": "math", "description": "Returns the Base-10 logarithm" }, "ln": { "result": "decimal", "group": "math", "description": "Returns the natural logarithm" }, "pow": { "args": [{ "name": "exp", "type": "<T>" }], "result": "decimal", "group": "math", "description": "Returns the value raised to the power of exp." }, "min": { "result": "decimal", "group": "math", "description": "Returns the min of the values of the array Over a SCALAR it takes a bound instead and returns the smaller of the two, so `min(3)` on 5 is 3. The array form ignores any argument; an EMPTY array yields null.", "args": [{ "name": "bound", "type": "decimal", "optional": true }] }, "max": { "result": "decimal", "group": "math", "description": "Returns the max of the values of the array Over a SCALAR it takes a bound instead and returns the larger of the two, so `max(8)` on 5 is 8. The array form ignores any argument; an EMPTY array yields null.", "args": [{ "name": "bound", "type": "decimal", "optional": true }] }, "sum": { "result": "decimal", "group": "math", "description": "Returns the sum of the values of the array" }, "avg": { "result": "decimal", "group": "math", "description": "Returns the average of the values of the array" }, "product": { "result": "decimal", "group": "math", "description": "Returns the product of the values of the array" }, "odd": { "result": "bool", "group": "comparison", "description": "Returns whether or not the value is odd" }, "even": { "result": "bool", "group": "comparison", "description": "Returns whether or not the value is even" }, "in": { "args": [{ "name": "search", "type": "<T>" }], "result": "bool", "group": "comparison", "description": "Returns whether or not the value is in the array" }, "add": { "args": [{ "name": "value", "type": "decimal" }], "result": "decimal", "group": "math", "description": "Add 2 values together and return the answer" }, "bitwise_and": { "args": [{ "name": "value", "type": "int" }], "result": "int", "group": "math", "description": "Bitwise AND 2 values together and return the answer" }, "bitwise_or": { "args": [{ "name": "value", "type": "int" }], "result": "int", "group": "math", "description": "Bitwise OR 2 values together and return the answer" }, "bitwise_xor": { "args": [{ "name": "value", "type": "int" }], "result": "int", "group": "math", "description": "Bitwise XOR 2 values together and return the answer" }, "not": { "result": "bool", "group": "comparison", "description": "Returns the opposite of the existing value evaluated as a boolean" }, "bitwise_not": { "result": "bool", "group": "comparison", "description": "Returns the existing value with its bits flipped" }, "is_object": { "result": "bool", "group": "comparison", "description": "Returns whether or not the value is an object." }, "is_array": { "result": "bool", "group": "comparison", "description": "Returns whether or not the value is a numerical indexed array." }, "is_int": { "result": "bool", "group": "comparison", "description": "Returns whether or not the value is an integer." }, "is_decimal": { "result": "bool", "group": "comparison", "description": "Returns whether or not the value is a decimal value." }, "is_bool": { "result": "bool", "group": "comparison", "description": "Returns whether or not the value is a boolean." }, "is_text": { "result": "bool", "group": "comparison", "description": "Returns whether or not the value is text." }, "addslashes": { "result": "text", "group": "text", "description": "Adds a backslash to the following characters: single quote, double quote, backslash, and null character." }, "escape": { "result": "text", "group": "text", "description": "Converts special characters into their escaped variants. Ex: for tabs and" }, "list_encodings": { "result": "text[]", "group": "text", "description": "List support character encodings" }, "detect_encoding": { "args": [{ "name": "encodings", "type": "text", "optional": true }], "result": "text", "group": "text", "description": "Detect the character encoding of the supplied text" }, "to_utf8": { "result": "text", "group": "text", "description": "Convert the supplied text from its binary form (ISO-8859-1) to UTF-8." }, "from_utf8": { "result": "text", "group": "text", "description": "Convert the supplied text from UTF-8 to its binary form (ISO-8859-1)." }, "convert_encoding": { "args": [{ "name": "to", "type": "text" }, { "name": "from", "type": "text" }], "result": "text", "group": "text", "description": "Convert the character encoding of the supplied text" }, "trim": { "args": [{ "name": "mask", "type": "text", "optional": true }], "result": "text", "group": "text", "description": "Trim whitespace or other characters from both sides and return the result" }, "ltrim": { "args": [{ "name": "mask", "type": "text", "optional": true }], "result": "text", "group": "text", "description": "Trim whitespace or other characters from the left side and return the result" }, "rtrim": { "args": [{ "name": "mask", "type": "text", "optional": true }], "result": "text", "group": "text", "description": "Trim whitespace or other characters from the right return the result" }, "capitalize": { "result": "text", "group": "text", "description": "Converts the first letter of each word to a capital letter" }, "substr": { "args": [{ "name": "start", "type": "int" }, { "name": "length", "type": "int" }], "result": "text", "group": "text", "description": "Extracts a section of text" }, "split": { "args": [{ "name": "separator", "type": "text" }], "result": "text[]", "group": "text", "description": "Splits text into an array of text and returns the result" }, "join": { "args": [{ "name": "separator", "type": "text" }], "result": "text", "group": "array", "description": "Joins an array into a text string via the separator and returns the result" }, "strlen": { "result": "int", "group": "text", "description": "Returns the number of characters" }, "starts_with": { "args": [{ "name": "search", "type": "text" }], "result": "bool", "group": "text", "description": "Returns whether or not the expression is present at the beginning Direction: the piped value is the subject text; the argument is the substring searched for." }, "istarts_with": { "args": [{ "name": "search", "type": "text" }], "result": "bool", "group": "text", "description": "Returns whether or not the case-insensitive expression is present at the beginning Direction: the piped value is the subject text; the argument is the substring searched for." }, "ends_with": { "args": [{ "name": "search", "type": "text" }], "result": "bool", "group": "text", "description": "Returns whether or not the expression is present at the end Direction: the piped value is the subject text; the argument is the substring searched for." }, "iends_with": { "args": [{ "name": "search", "type": "text" }], "result": "bool", "group": "text", "description": "Returns whether or not the case-insensitive expression is present at the end Direction: the piped value is the subject text; the argument is the substring searched for." }, "contains": { "args": [{ "name": "search", "type": "text" }], "result": "bool", "group": "text", "description": "Returns whether or not the expression is found Direction: the piped value is the subject text; the argument is the substring searched for." }, "icontains": { "args": [{ "name": "search", "type": "text" }], "result": "bool", "group": "text", "description": "Returns whether or not the case-insensitive expression is found Direction: the piped value is the subject text; the argument is the substring searched for." }, "set": { "args": [{ "name": "path", "type": "text" }, { "name": "value", "type": "any" }], "result": "any", "group": "manipulation", "description": "Sets a value at the path within the object and returns the updated object" }, "set_conditional": { "args": [{ "name": "path", "type": "text" }, { "name": "value", "type": "any" }, { "name": "conditional", "type": "any" }], "result": "any", "group": "manipulation", "description": "Sets a value at the path within the object and returns the updated object, if the conditional expression is true" }, "set_ifnotempty": { "args": [{ "name": "path", "type": "text" }, { "name": "value", "type": "any" }], "result": "any", "group": "manipulation", "description": 'Sets a value (if it is not empty: "", null, 0, "0", false, [], {}) at the path within the object and returns the updated object' }, "set_ifnotnull": { "args": [{ "name": "path", "type": "text" }, { "name": "value", "type": "any" }], "result": "any", "group": "manipulation", "description": "Sets a value (if it is not null) at the path within the object and returns the updated object" }, "first_notnull": { "args": [{ "name": "value", "type": "any" }], "result": "any", "group": "manipulation", "description": "Returns the first value that is not null" }, "first_notempty": { "args": [{ "name": "value", "type": "any" }], "result": "any", "group": "manipulation", "description": 'Returns the first value that is not empty - i.e. not ("", null, 0, "0", false, [], {})' }, "unset": { "args": [{ "name": "path", "type": "text" }], "result": "any", "group": "manipulation", "description": "Removes a value at the path within the object and returns the updated object" }, "transform": { "args": [{ "name": "expression", "type": "text" }], "result": "any", "group": "manipulation", "description": 'Evaluates a Xano Expression Engine expression over the piped value. NOT a JavaScript body \u2014 there is no `return`, and the piped value binds POSITIONALLY as `$0` (or `$$`), NOT as `$this` (which resolves to null here, yielding a wrong answer with no error). `$var`, `$input`, `$env` and `$auth` also resolve, and filters may be piped inside the expression: `$0 * 2`, `$0|sort|join:","`, `{ id: $0.id, total: $0.qty * $0.price }`. PARENTHESIZE a pipe used inside an object/array literal \u2014 `{ s: ($0|sort|join:",") }` \u2014 or the filter argument\'s comma is read as the key separator, returning null and silently dropping every later key. For JavaScript use fl.lambda, whose body does bind `$this`.' }, "get": { "args": [{ "name": "path", "type": "text" }, { "name": "default", "type": "json", "optional": true }], "result": "any", "group": "manipulation", "description": "Returns the value of an object at the specified path" }, "has": { "args": [{ "name": "path", "type": "text" }], "result": "bool", "group": "manipulation", "description": "Returns the existence of whether or not something is present in the object at the specified path" }, "to_expr": { "result": "any", "group": "transform", "description": "Treats the PIPED TEXT as Xano Expression Engine source, evaluates it, and returns the result. Takes no argument. `$var`, `$input`, `$env` and `$auth` resolve inside it; there is no operand binding (`$0` is null) because the operand IS the source. For an expression OVER a value, use fl.transform." }, "to_text": { "result": "text", "group": "transform", "description": "Converts integer, decimal, or bool types to text and returns the result" }, "to_int": { "result": "int", "group": "transform", "description": "Converts text, decimal, or bool types to an integer and returns the result" }, "to_decimal": { "result": "decimal", "group": "transform", "description": "Converts text, integer, or bool types to a decimal and returns the result" }, "to_bool": { "result": "bool", "group": "transform", "description": "Converts text, integer, or decimal types to a bool and returns the result" }, "create_object": { "args": [{ "name": "values", "type": "<T>[]" }], "result": "any", "group": "transform", "description": "Creates an object based on a list of keys and a list of values" }, "create_object_from_entries": { "result": "any", "group": "transform", "description": "Creates an object based on an array of key/value pairs. (i.e. same result as the entries filter)" }, "json_decode": { "result": "any", "group": "transform", "description": "Decodes the value represented as json and returns the result" }, "json_encode": { "result": "text", "group": "transform", "description": "Encodes the value and returns the result as json text" }, "xml_decode": { "result": "any", "group": "transform", "description": "Decodes XML and returns the result" }, "csv_parse": { "args": [{ "name": "separator", "type": "text" }, { "name": "enclosure", "type": "text" }, { "name": "escape", "type": "text" }], "result": "any", "group": "transform", "description": "Parse the contents of a CSV file and convert it into an array of objects." }, "csv_decode": { "args": [{ "name": "separator", "type": "text" }, { "name": "enclosure", "type": "text" }, { "name": "escape", "type": "text" }], "result": "any", "group": "transform", "description": "Decodes the value represented in the CSV format and returns the result" }, "csv_encode": { "args": [{ "name": "separator", "type": "text" }, { "name": "enclosure", "type": "text" }, { "name": "escape", "type": "text" }], "result": "text", "group": "transform", "description": "Encodes the value and returns the result in CSV format Writes NO header row \u2014 values only. Each row contributes its own values in THAT row's key order, with no normalization across rows, so rows whose keys differ in order or count silently misalign columns rather than erroring. Non-scalar cells (nested objects/arrays) are JSON-encoded into the cell, and `false` writes as empty. If the piped array's elements are scalars rather than objects, the whole array is treated as ONE row and you get a single line. For a header, use `csv_create`." }, "csv_create": { "args": [{ "name": "rows", "type": "text[]" }, { "name": "separator", "type": "text" }, { "name": "enclosure", "type": "text" }, { "name": "escape", "type": "text" }], "result": "text", "group": "transform", "description": "Creates a CSV format data stream from a list of column names and their corresponding data rows. Direction: the piped value is the list of COLUMN NAMES (written as the header line); the `rows` argument carries the data rows. This is the header-writing counterpart to `csv_encode`, which emits values only." }, "url_decode": { "result": "text", "group": "transform", "description": "Decodes the value represented as a url encoded value" }, "url_decode_rfc3986": { "result": "text", "group": "transform", "description": "Decodes the value represented as a url encoded value using the RFC 3986 specification" }, "url_encode": { "result": "text", "group": "transform", "description": "Encodes the value and returns the result as a url encoded value" }, "url_encode_rfc3986": { "result": "text", "group": "transform", "description": "Encodes the value and returns the result as a url encoded value using the RFC 3986 specification" }, "url_addarg": { "args": [{ "name": "key", "type": "text" }, { "name": "value", "type": "text" }, { "name": "encoding_rfc3986", "type": "bool", "optional": true }], "result": "text", "group": "text", "description": "Parses a URL and returns an updated version with an encoded version of the supplied argument" }, "url_delarg": { "args": [{ "name": "key", "type": "text" }], "result": "text", "group": "text", "description": "Parses a URL and returns an updated version with the supplied argument removed" }, "url_hasarg": { "args": [{ "name": "key", "type": "text" }], "result": "text", "group": "text", "description": "Returns the existence of a argument in the URL" }, "url_getarg": { "args": [{ "name": "key", "type": "text" }, { "name": "default", "type": "text", "optional": true }], "result": "text", "group": "text", "description": "Gets the argument's value from a URL" }, "url_parse": { "result": "json", "group": "text", "description": "Parses a URL into its individual components." }, "querystring_parse": { "result": "json", "group": "text", "description": "Parses a query string from a URL into its individual key-value pairs." }, "yaml_decode": { "result": "obj", "group": "transform", "description": "Decodes the value represented as yaml and returns the result" }, "yaml_encode": { "result": "text", "group": "transform", "description": "Encodes the value and returns the result as yaml text `inline` is the depth at which YAML stops expanding and starts writing flow style, and `indent` the spaces per level: the default writes a nested map over several lines, while `inline: 0` writes the whole value as `{ a: { b: 1 } }` on one.", "args": [{ "name": "options", "type": "bool", "optional": true }, { "name": "inline", "type": "int", "optional": true }, { "name": "indent", "type": "int", "optional": true }] }, "hex2bin": { "result": "text", "group": "transform", "description": "Converts a hex value into its binary equivalent" }, "bin2hex": { "result": "text", "group": "transform", "description": "Converts a binary value into its hex equivalent" }, "dechex": { "result": "text", "group": "transform", "description": "Converts a decimal value into its hex equivalent" }, "hexdec": { "result": "text", "group": "transform", "description": "Converts a hex value into its decimal equivalent" }, "decbin": { "result": "text", "group": "transform", "description": "Converts a decimal value into its binary string (i.e. 01010) equivalent" }, "bindec": { "result": "text", "group": "transform", "description": "Converts a binary string (i.e. 01010) into its decimal equivalent" }, "decoct": { "result": "text", "group": "transform", "description": "Converts a decimal value into its octal equivalent" }, "octdec": { "result": "text", "group": "transform", "description": "Converts an octal value into its decimal equivalent" }, "base_convert": { "args": [{ "name": "from_base", "type": "any" }, { "name": "to_base", "type": "any" }], "result": "text", "group": "transform", "description": "Converts a value between two bases" }, "base64_decode": { "result": "text", "group": "transform", "description": "Decodes the value represented as base64 text and returns the result" }, "base64_encode": { "result": "text", "group": "transform", "description": "Encodes the value and returns the result as base64 text" }, "base64_decode_urlsafe": { "result": "text", "group": "transform", "description": "Decodes the value represented as base64 urlsafe text and returns the result" }, "base64_encode_urlsafe": { "result": "text", "group": "transform", "description": "Encodes the value and returns the result as base64 urlsafe text" }, "encrypt": { "args": [{ "name": "algorithm", "type": "enum" }, { "name": "key", "type": "text" }, { "name": "iv", "type": "text" }], "result": "text", "group": "security", "description": "Encrypts the value and returns the result in raw binary form." }, "decrypt": { "args": [{ "name": "algorithm", "type": "enum" }, { "name": "key", "type": "text" }, { "name": "iv", "type": "text" }], "result": "text", "group": "security", "description": "Decrypts the value and returns the result." }, "jwe_encode": { "description": "Encodes the value and return the result as a JWE token", "args": [{ "name": "arg1", "type": "any" }] }, "jwe_decode": { "description": "Decodes the JWE token and return the result", "args": [{ "name": "arg1", "type": "any" }] }, "concat": { "args": [{ "name": "value", "type": "any" }], "result": "text", "group": "text", "description": "Concatenates two values together" }, "sprintf": { "result": "text", "group": "text", "description": "formats text with variable substitution", "variadic": true }, "secureid_encode": { "args": [{ "name": "salt", "type": "text" }], "result": "text", "group": "security", "description": "Returns an encrypted version of the id" }, "secureid_decode": { "args": [{ "name": "salt", "type": "text" }], "result": "int", "group": "security", "description": "Returns the id of the original encode" }, "md5": { "args": [{ "name": "raw", "type": "bool", "optional": true }], "result": "text", "group": "security", "description": "Returns a MD5 signature representation of the value" }, "sha1": { "args": [{ "name": "raw", "type": "bool", "optional": true }], "result": "text", "group": "security", "description": "Returns a SHA1 signature representation of the value" }, "sha256": { "args": [{ "name": "raw", "type": "bool", "optional": true }], "result": "text", "group": "security", "description": "Returns a SHA256 signature representation of the value" }, "sha384": { "args": [{ "name": "raw", "type": "bool", "optional": true }], "result": "text", "group": "security", "description": "Returns a SHA384 signature representation of the value" }, "sha512": { "args": [{ "name": "raw", "type": "bool", "optional": true }], "result": "text", "group": "security", "description": "Returns a SHA512 signature representation of the value" }, "hmac_md5": { "args": [{ "name": "key", "type": "text" }, { "name": "raw", "type": "bool", "optional": true }], "result": "text", "group": "security", "description": "Returns a MD5 signature representation of the value using a shared secret via the HMAC method" }, "hmac_sha1": { "args": [{ "name": "key", "type": "text" }, { "name": "raw", "type": "bool", "optional": true }], "result": "text", "group": "security", "description": "Returns a SHA1 signature representation of the value using a shared secret via the HMAC method" }, "hmac_sha256": { "args": [{ "name": "key", "type": "text" }, { "name": "raw", "type": "bool", "optional": true }], "result": "text", "group": "security", "description": "Returns a SHA256 signature representation of the value using a shared secret via the HMAC method" }, "hmac_sha384": { "args": [{ "name": "key", "type": "text" }, { "name": "raw", "type": "bool", "optional": true }], "result": "text", "group": "security", "description": "Returns a SHA384 signature representation of the value using a shared secret via the HMAC method" }, "hmac_sha512": { "args": [{ "name": "key", "type": "text" }, { "name": "raw", "type": "bool", "optional": true }], "result": "text", "group": "security", "description": "Returns a SHA512 signature representation of the value using a shared secret via the HMAC method" }, "regex_quote": { "args": [{ "name": "delimiter", "type": "text", "optional": true }], "result": "text", "group": "text", "description": "Update the supplied text value to be properly escaped for regular expressions." }, "regex_replace": { "args": [{ "name": "replacement", "type": "text" }, { "name": "subject", "type": "text" }], "result": "text", "group": "text", "description": "Perform a regular expression search and replace on the supplied subject text. Direction: the piped value is the regex PATTERN; the `subject` argument is the text tested against it \u2014 reversed vs starts_with/contains. Build the pattern with c.regex(...) (delimiter-wrapped); a bare c.text(...) is rejected." }, "map": { "args": [{ "name": "code", "type": "text" }, { "name": "timeout", "type": "int", "optional": true }], "result": "any[]", "group": "array", "description": "Creates a new array with the results of calling a provided function on every element in the calling array." }, "filter": { "args": [{ "name": "code", "type": "text" }, { "name": "timeout", "type": "int", "optional": true }], "result": "any[]", "group": "array", "description": "Filters the elements of an array based on the code block returning true to keep the element or false to skip it." }, "some": { "args": [{ "name": "code", "type": "text" }, { "name": "timeout", "type": "int", "optional": true }], "result": "any[]", "group": "array", "description": "Checks if at least one element in the array passes the test implemented by the provided function." }, "every": { "args": [{ "name": "code", "type": "text" }, { "name": "timeout", "type": "int", "optional": true }], "result": "any[]", "group": "array", "description": "Checks if all elements in the array pass the test implemented by the provided function." }, "find": { "args": [{ "name": "code", "type": "text" }, { "name": "timeout", "type": "int", "optional": true }], "result": "any[]", "group": "array", "description": "Finds if all elements in the array pass the test implemented by the provided function." }, "findIndex": { "args": [{ "name": "code", "type": "text" }, { "name": "timeout", "type": "int", "optional": true }], "result": "any[]", "group": "array", "description": "Finds the index of the first element in the array that passes the test implemented by the provided function." }, "reduce": { "args": [{ "name": "initial_value", "type": "int" }, { "name": "code", "type": "text" }, { "name": "timeout", "type": "int", "optional": true }], "result": "any[]", "group": "array", "description": "Reduces the array to a single value using the code block to combine each element of the array." }, "pick": { "args": [{ "name": "keys", "type": "text" }], "result": "<T>", "group": "array", "description": "Pick keys from the object to create a new object of just those keys." }, "unpick": { "args": [{ "name": "keys", "type": "text" }], "result": "<T>", "group": "array", "description": "Remove keys from the object to create a new object of the remaining keys." }, "text_unescape": { "result": "text", "group": "text", "description": "Convert escaped sequences into their raw form. Ex: \\n becomes a newline, \\t becomes a tab." }, "text_escape": { "result": "text", "group": "text", "description": "Converts control characters into their escaped sequences. Ex: newlines as \\n, tabs as \\t" }, "sql_esc": { "result": "text", "group": "text", "description": "Wraps text in single quotes and escapes any single quotes within the text to prevent SQL injection attacks. This is useful for safely inserting user input into values within SQL queries." }, "sql_alias": { "result": "text", "group": "text", "description": "Wraps text in double quotes and escapes any double quotes within the text to prevent SQL injection attacks. This is useful for safely inserting user input into table names or aliases within SQL queries." }, "is_uuid": { "result": "bool", "group": "comparison", "description": "Returns whether or not the value is a valid UUID." }, "lambda": { "args": [{ "name": "code", "type": "text" }, { "name": "timeout", "type": "int", "optional": true }], "result": "any", "group": "transform", "description": "Business logic using JavaScript." }, "lower": { "result": "text", "group": "text", "description": "Converts all characters to lower case and returns the result" }, "upper": { "result": "text", "group": "text", "description": "Converts all characters to upper case and returns the result" }, "sub": { "args": [{ "name": "value", "type": "decimal" }], "result": "decimal", "group": "math", "description": "Subtracts 2 values together and returns the answer" }, "mul": { "args": [{ "name": "value", "type": "decimal" }], "result": "decimal", "group": "math", "description": "Multiplies 2 values together and returns the answer" }, "div": { "args": [{ "name": "value", "type": "decimal" }], "result": "decimal", "group": "math", "description": "Divides 2 values together and returns the answer" }, "fsort": { "args": [{ "name": "path", "type": "text", "optional": true }, { "name": "type", "type": "enum", "optional": true, "enum": ["text", "itext", "natural", "inatural", "number"] }, { "name": "asc", "type": "bool", "optional": true }], "result": "<T>[]", "group": "array", "description": 'Sort an array of elements with an optional path inside the element Only `type: "number"` compares NUMERICALLY. "text"/"itext" are case-sensitive/insensitive string compares, "natural"/"inatural" are the human-readable "a2 < a10" orderings, and the default is "itext". An unrecognized spelling silently falls through to "itext" rather than erroring, so a numeric sort MUST spell "number" \u2014 anything else returns the right elements in the wrong order. `path` drills into each element.' }, "array_shuffle": { "result": "<T>[]", "group": "array", "description": "Shuffles the order of the entries in the array." }, "array_diff": { "args": [{ "name": "value", "type": "<T>[]" }], "result": "<T>[]", "group": "array", "description": "Return the entries from the first array that are not in the second" }, "array_diff_assoc": { "args": [{ "name": "value", "type": "<T>[]" }], "result": "<T>[]", "group": "array", "description": "Return the entries from the first array that are not in the second" }, "array_intersect": { "args": [{ "name": "value", "type": "<T>[]" }], "result": "<T>[]", "group": "array", "description": "Return the entries from the first array that are also present in" }, "array_intersect_assoc": { "args": [{ "name": "value", "type": "<T>[]" }], "result": "<T>[]", "group": "array", "description": "Return the entries from the first array that are also present in" }, "array_merge": { "args": [{ "name": "value", "type": "<T>[]" }], "result": "<T>[]", "group": "array", "description": "Merge the first level of elements of both arrays together and" }, "array_merge_recursive": { "args": [{ "name": "value", "type": "<T>[]" }], "result": "<T>[]", "group": "array", "description": "Merge the elements from all levels of both arrays together and" }, "array_push": { "args": [{ "name": "value", "type": "<T>" }], "result": "<T>[]", "group": "array", "description": "Push an element on to the end of an array and return the new array" }, "array_pop": { "result": "<T>", "group": "array", "description": "Pops the last element of the array off and returns it" }, "array_unshift": { "args": [{ "name": "value", "type": "<T>" }], "result": "<T>[]", "group": "array", "description": "Push an element to the beginning of an array and return the new array" }, "array_shift": { "result": "<T>", "group": "array", "description": "Shifts the first element of the array off and returns it" }, "array_remove": { "args": [{ "name": "value", "type": "<T>" }, { "name": "path", "type": "text" }, { "name": "strict", "type": "bool", "optional": true }], "result": "<T>[]", "group": "array", "description": "Remove any elements from the array that match the supplied value" }, "num_min": { "args": [{ "name": "value", "type": "any" }], "result": "decimal", "group": "math", "description": "Returns the min both values" }, "num_max": { "args": [{ "name": "value", "type": "any" }], "result": "decimal", "group": "math", "description": "Returns the max both values" }, "eq": { "args": [{ "name": "value", "type": "<T>" }], "result": "bool", "group": "comparison", "description": "Returns a boolean if both values are equal" }, "ne": { "args": [{ "name": "value", "type": "<T>" }], "result": "bool", "group": "comparison", "description": "Returns a boolean if both values are not equal" }, "gt": { "args": [{ "name": "value", "type": "<T>" }], "result": "bool", "group": "comparison", "description": "Returns a boolean if the left value is greater than the right value" }, "gte": { "args": [{ "name": "value", "type": "<T>" }], "result": "bool", "group": "comparison", "description": "Returns a boolean if the left value is greater than or equal to the" }, "lt": { "args": [{ "name": "value", "type": "<T>" }], "result": "bool", "group": "comparison", "description": "Returns a boolean if the left value is less than the right value" }, "lte": { "args": [{ "name": "value", "type": "<T>" }], "result": "bool", "group": "comparison", "description": "Returns a boolean if the left value is less than or equal to the right value" }, "mod": { "args": [{ "name": "value", "type": "int" }], "result": "int", "group": "math", "description": "Modulus 2 values together and return the answer" }, "empty": { "result": "bool", "group": "comparison", "description": 'Returns whether or not the value is empty ("", null, 0, "0", false, [], {})' }, "array_slice": { "args": [{ "name": "offset", "type": "int" }, { "name": "length", "type": "int", "optional": true }], "result": "<T>[]", "group": "array", "description": "Extract a section from an array." }, "strip_tags": { "args": [{ "name": "exclude", "type": "text", "optional": true }], "result": "text", "group": "text", "description": "Removes HTML tags from a string" }, "strip_accents": { "result": "text", "group": "text", "description": "Removes accents from characters" }, "strpos": { "args": [{ "name": "search", "type": "text" }], "result": "int", "group": "text", "description": "Returns the index of the case-sensitive expression or false if it" }, "stripos": { "args": [{ "name": "search", "type": "text" }], "result": "int", "group": "text", "description": "Returns the index of the case-insensitive expression or false if it" }, "array_fill": { "args": [{ "name": "start", "type": "int" }, { "name": "count", "type": "int" }], "result": "any[]", "group": "manipulation", "description": "Create an array of a certain size with a default value." }, "array_fill_keys": { "args": [{ "name": "keys", "type": "any[]" }], "result": "any[]", "group": "manipulation", "description": "Create an array of keys with a default value." }, "array_keys": { "result": "text[]", "group": "array", "description": "Get the property keys of an object/array as a numerically indexed array." }, "array_values": { "result": "any[]", "group": "array", "description": "Get the property values of an object/array as a numerically indexed array" }, "array_entries": { "result": "any[]", "group": "array", "description": "Get the property entries of an object/array as a numerically" }, "to_epochms": { "args": [{ "name": "timezone", "type": "text", "optional": true }], "result": "epochms", "group": "transform", "description": "Converts a text expression (now, next friday, Jan 1 2000) to" }, "to_epoch_ms": { "args": [{ "name": "timezone", "type": "text", "optional": true }], "result": "int", "group": "transform", "description": "Converts a text expression (now, next friday, Jan 1 2000) to the" }, "to_epoch_sec": { "args": [{ "name": "timezone", "type": "text", "optional": true }], "result": "int", "group": "transform", "description": "Converts a text expression (now, next friday, Jan 1 2000) to the" }, "to_epoch_minute": { "args": [{ "name": "timezone", "type": "text", "optional": true }], "result": "int", "group": "transform", "description": "Converts a text expression (now, next friday, Jan 1 2000) to the" }, "to_epoch_hour": { "args": [{ "name": "timezone", "type": "text", "optional": true }], "result": "int", "group": "transform", "description": "Converts a text expression (now, next friday, Jan 1 2000) to the" }, "to_epoch_day": { "args": [{ "name": "timezone", "type": "text", "optional": true }], "result": "int", "group": "transform", "description": "Converts a text expression (now, next friday, Jan 1 2000) to the" }, "crypto_jws_encode": { "args": [{ "name": "headers", "type": "json" }, { "name": "key", "type": "json" }, { "name": "algorithm", "type": "enum" }, { "name": "ttl", "type": "int", "optional": true }], "result": "text", "group": "security", "description": "Encodes the value and return the result as a JWS token" }, "crypto_jws_decode": { "args": [{ "name": "check_claims", "type": "json" }, { "name": "key", "type": "json" }, { "name": "algorithm", "type": "enum" }, { "name": "timeDrift", "type": "int", "optional": true }], "result": "json", "group": "security", "description": "Decodes the JWS token and return the result" }, "crypto_jwe_encode": { "args": [{ "name": "headers", "type": "json" }, { "name": "key", "type": "json" }, { "name": "key_algorithm", "type": "enum" }, { "name": "content_algorithm", "type": "enum" }, { "name": "ttl", "type": "int", "optional": true }], "result": "text", "group": "security", "description": "Encodes the value and return the result as a JWE token" }, "crypto_jwe_decode": { "args": [{ "name": "check_claims", "type": "json" }, { "name": "key", "type": "json" }, { "name": "key_algorithm", "type": "enum" }, { "name": "content_algorithm", "type": "enum" }, { "name": "timeDrift", "type": "int", "optional": true }], "result": "json", "group": "security", "description": "Decodes the JWE token and return the result" }, "string_replace": { "args": [{ "name": "search", "type": "text" }, { "name": "replacement", "type": "text" }], "result": "text", "group": "text", "description": "Replace a text phrase with another" }, "uid": { "result": "int", "group": "security", "description": "Returns a unique 64bit unsigned int value seeded off the value" }, "uuid4": { "result": "text", "group": "security", "description": "Returns a universally unique identifier" }, "epochms_from_format": { "args": [{ "name": "format", "type": "text" }, { "name": "timezone", "type": "text", "optional": true }], "result": "text", "group": "timestamp", "description": "Parse a timestamp from a flexible format." }, "epochms_date": { "args": [{ "name": "format", "type": "text" }, { "name": "timezone", "type": "text", "optional": true }], "result": "text", "group": "timestamp", "description": "Converts a timestamp into a human readable formatted date based on" }, "epochms_transform": { "args": [{ "name": "format", "type": "text" }, { "name": "timezone", "type": "text", "optional": true }], "result": "text", "group": "timestamp", "description": "Takes a timestamp and applies a relative transformation to it. Ex." }, "epochms_add_secs": { "args": [{ "name": "seconds", "type": "int" }], "result": "epochms", "group": "timestamp", "description": "Add seconds to a timestamp. (negative values are ok)" }, "epochms_add_ms": { "args": [{ "name": "milliseconds", "type": "int" }], "result": "epochms", "group": "timestamp", "description": "Add milliseconds to a timestamp. (negative values are ok)" }, "regex_test": { "args": [{ "name": "subject", "type": "text" }], "result": "bool", "group": "text", "description": "Tests if a regular expression matches the supplied subject text. Direction: the piped value is the regex PATTERN; the `subject` argument is the text tested against it \u2014 reversed vs starts_with/contains. Build the pattern with c.regex(...) (delimiter-wrapped); a bare c.text(...) is rejected." }, "regex_match": { "args": [{ "name": "subject", "type": "text" }], "result": "text[]", "group": "text", "description": "Return the first set of matches performed by a regular expression Direction: the piped value is the regex PATTERN; the `subject` argument is the text tested against it \u2014 reversed vs starts_with/contains. Build the pattern with c.regex(...) (delimiter-wrapped); a bare c.text(...) is rejected." }, "regex_match_all": { "args": [{ "name": "subject", "type": "text" }], "result": "text[]", "group": "text", "description": "Return all matches performed by a regular expression on the Direction: the piped value is the regex PATTERN; the `subject` argument is the text tested against it \u2014 reversed vs starts_with/contains. Build the pattern with c.regex(...) (delimiter-wrapped); a bare c.text(...) is rejected." }, "array_filter": { "args": [{ "name": "match", "type": "obj" }, { "name": "path", "type": "text", "optional": true }], "result": "<T>[]", "group": "array", "description": 'Keeps the elements matching EVERY key of the match object. Comparison is LOOSE, so a match of {k:"1"} keeps an element whose k is the number 1. `path` drills into the piped value first; a non-array piped value throws. Not the lambda `filter` \u2014 this matches by example, with no code.' }, "array_find": { "args": [{ "name": "match", "type": "obj" }], "result": "<T>", "group": "array", "description": "The FIRST element matching every key of the match object, comparing loosely. \u26A0 A miss THROWS (`Unable to find element.`) rather than yielding null, so guard the array before calling it or wrap the step in s.try_catch \u2014 unlike `array_has`, which answers false." }, "array_has": { "args": [{ "name": "match", "type": "obj" }], "result": "bool", "group": "array", "description": "Whether any element matches every key of the match object, comparing loosely. The safe counterpart to `array_find`: a miss returns false instead of throwing." }, "array_lower": { "result": "<T>[]", "group": "array", "description": "Lowercases every STRING element of the piped array, leaving other elements alone. Element-wise, unlike `lower`, which expects one string." }, "array_push_conditional": { "args": [{ "name": "value", "type": "any" }, { "name": "conditional", "type": "bool" }], "result": "<T>[]", "group": "array", "description": "Appends `value` only when `conditional` is truthy, and returns the array either way \u2014 so an optional item needs no surrounding branch." }, "array_replace": { "args": [{ "name": "match", "type": "any" }, { "name": "result", "type": "any" }], "result": "<T>[]", "group": "array", "description": "Replaces an element and returns the array. `match` is either an integer INDEX or a match object compared loosely against each element. \u26A0 An index that does not exist throws (`Unable to find element.`)." }, "array_set": { "args": [{ "name": "path", "type": "text" }, { "name": "value", "type": "any" }], "result": "obj", "group": "manipulation", "description": "Sets a dotted path on the piped value and returns it, creating intermediate levels. A piped value that is not an array/object is replaced by an empty one rather than erroring." }, "array_upmerge": { "args": [{ "name": "match", "type": "obj" }, { "name": "node", "type": "obj" }], "result": "<T>[]", "group": "array", "description": "Merges `node` INTO every element matching `match` (loose comparison) and returns the array. An update-in-place for a list of records, where `array_replace` swaps the whole element." }, "clamp_max": { "args": [{ "name": "max", "type": "decimal" }], "result": "decimal", "group": "math", "description": "Lowers the piped number to `max` when it is above it; otherwise returns it unchanged." }, "clamp_min": { "args": [{ "name": "min", "type": "decimal" }], "result": "decimal", "group": "math", "description": "Raises the piped number to `min` when it is below it; otherwise returns it unchanged." }, "ms_to_secs": { "result": "int", "group": "timestamp", "description": "Milliseconds to whole seconds, truncated toward zero. The inverse of `secs_to_ms`, and the conversion between an epochms value and the SECOND counts every ttl/expiry knob takes." }, "null": { "result": "null", "group": "misc", "description": "Returns a null value." }, "rsort": { "result": "<T>[]", "group": "array", "description": "Sorts the piped array in DESCENDING order. A non-array is returned unchanged." }, "secs_to_ms": { "result": "int", "group": "timestamp", "description": "Seconds to milliseconds. The inverse of `ms_to_secs`." }, "splice": { "args": [{ "name": "offset", "type": "int" }, { "name": "length", "type": "int", "optional": true }, { "name": "path", "type": "text", "optional": true }], "result": "<T>[]", "group": "array", "description": "\u26A0 Returns the REMOVED slice, not the remainder: splicing [1,2,3,4] at offset 1 for length 2 yields [2,3]. `length` defaults to 1. With a `path` it instead removes in place inside that path and returns the whole piped value \u2014 the two forms return different things." }, "to_geo_linestring": { "result": "text", "group": "geo", "description": "Coerces the piped value to a geo LINESTRING, returned as WKT text." }, "to_geo_multilinestring": { "result": "text", "group": "geo", "description": "Coerces the piped value to a geo MULTILINESTRING, returned as WKT text." }, "to_geo_multipoint": { "result": "text", "group": "geo", "description": "Coerces the piped value to a geo MULTIPOINT, returned as WKT text." }, "to_geo_multipolygon": { "result": "text", "group": "geo", "description": "Coerces the piped value to a geo MULTIPOLYGON, returned as WKT text." }, "to_geo_point": { "result": "text", "group": "geo", "description": "Coerces the piped value to a geo POINT, returned as WKT text. Accepts the {type, data} shape or a WKT string." }, "to_geo_polygon": { "result": "text", "group": "geo", "description": "Coerces the piped value to a geo POLYGON, returned as WKT text." } };
61
+ var FILTER_REQUIRED_ARGS = { "add": 1, "append": 2, "array_diff": 1, "array_diff_assoc": 1, "array_fill": 2, "array_fill_keys": 1, "array_filter": 1, "array_find": 1, "array_has": 1, "array_intersect": 1, "array_intersect_assoc": 1, "array_merge": 1, "array_merge_recursive": 1, "array_push": 1, "array_push_conditional": 2, "array_remove": 2, "array_replace": 2, "array_set": 2, "array_slice": 1, "array_unshift": 1, "array_upmerge": 2, "base_convert": 2, "bitwise_and": 1, "bitwise_or": 1, "bitwise_xor": 1, "clamp_max": 1, "clamp_min": 1, "concat": 1, "contains": 1, "convert_encoding": 2, "create_object": 1, "crypto_jwe_decode": 4, "crypto_jwe_encode": 4, "crypto_jws_decode": 3, "crypto_jws_encode": 3, "csv_create": 4, "csv_decode": 3, "csv_encode": 3, "csv_parse": 3, "decrypt": 3, "div": 1, "encrypt": 3, "ends_with": 1, "epochms_add_ms": 1, "epochms_add_secs": 1, "epochms_date": 1, "epochms_from_format": 1, "epochms_transform": 1, "eq": 1, "every": 1, "filter": 1, "find": 1, "findIndex": 1, "first_notempty": 1, "first_notnull": 1, "get": 1, "gt": 1, "gte": 1, "has": 1, "hmac_md5": 1, "hmac_sha1": 1, "hmac_sha256": 1, "hmac_sha384": 1, "hmac_sha512": 1, "icontains": 1, "iends_with": 1, "in": 1, "index_by": 1, "istarts_with": 1, "join": 1, "jwe_decode": 1, "jwe_encode": 1, "lambda": 1, "log": 1, "lt": 1, "lte": 1, "map": 1, "mod": 1, "mul": 1, "ne": 1, "num_max": 1, "num_min": 1, "number_format": 3, "pick": 1, "pow": 1, "prepend": 2, "range": 2, "reduce": 2, "regex_match": 1, "regex_match_all": 1, "regex_replace": 2, "regex_test": 1, "secureid_decode": 1, "secureid_encode": 1, "set": 2, "set_conditional": 3, "set_ifnotempty": 2, "set_ifnotnull": 2, "some": 1, "splice": 1, "split": 1, "starts_with": 1, "string_replace": 2, "stripos": 1, "strpos": 1, "sub": 1, "substr": 2, "transform": 1, "unpick": 1, "unset": 1, "url_addarg": 2, "url_delarg": 1, "url_getarg": 1, "url_hasarg": 1 };
62
+ var fl = {
63
+ "abs": (
64
+ /** Returns the absolute value (group: math, result: decimal) */
65
+ () => filter("abs")
66
+ ),
67
+ "acos": (
68
+ /** Calculates the arc cosine of the supplied value in radians (group: math, result: decimal) */
69
+ () => filter("acos")
70
+ ),
71
+ "acosh": (
72
+ /** Calculates the inverse hyperbolic cosine of the supplied value in radians (group: math, result: decimal) */
73
+ () => filter("acosh")
74
+ ),
75
+ "add": (
76
+ /** Add 2 values together and return the answer (group: math, result: decimal) */
77
+ slotted("add", ["value"], 1)
78
+ ),
79
+ "addslashes": (
80
+ /** Adds a backslash to the following characters: single quote, double quote, backslash, and null character. (group: text, result: text) */
81
+ () => filter("addslashes")
82
+ ),
83
+ "append": (
84
+ /** Push an element on to the end of an array within an object and return the updated object (group: array, result: <T>[]) */
85
+ slotted("append", ["value", "path"], 2)
86
+ ),
87
+ "array_diff": (
88
+ /** Return the entries from the first array that are not in the second (group: array, result: <T>[]) */
89
+ slotted("array_diff", ["value"], 1)
90
+ ),
91
+ "array_diff_assoc": (
92
+ /** Return the entries from the first array that are not in the second (group: array, result: <T>[]) */
93
+ slotted("array_diff_assoc", ["value"], 1)
94
+ ),
95
+ "array_entries": (
96
+ /** Get the property entries of an object/array as a numerically (group: array, result: any[]) */
97
+ () => filter("array_entries")
98
+ ),
99
+ "array_fill": (
100
+ /** Create an array of a certain size with a default value. (group: manipulation, result: any[]) */
101
+ slotted("array_fill", ["start", "count"], 2)
102
+ ),
103
+ "array_fill_keys": (
104
+ /** Create an array of keys with a default value. (group: manipulation, result: any[]) */
105
+ slotted("array_fill_keys", ["keys"], 1)
106
+ ),
107
+ "array_filter": (
108
+ /** Keeps the elements matching EVERY key of the match object. Comparison is LOOSE, so a match of {k:"1"} keeps an element whose k is the number 1. `path` drills into the piped value first; a non-array piped value throws. Not the lambda `filter` — this matches by example, with no code. (group: array, result: <T>[]) */
109
+ slotted("array_filter", ["match", "path"], 1)
110
+ ),
111
+ "array_find": (
112
+ /** The FIRST element matching every key of the match object, comparing loosely. ⚠ A miss THROWS (`Unable to find element.`) rather than yielding null, so guard the array before calling it or wrap the step in s.try_catch — unlike `array_has`, which answers false. (group: array, result: <T>) */
113
+ slotted("array_find", ["match"], 1)
114
+ ),
115
+ "array_has": (
116
+ /** Whether any element matches every key of the match object, comparing loosely. The safe counterpart to `array_find`: a miss returns false instead of throwing. (group: array, result: bool) */
117
+ slotted("array_has", ["match"], 1)
118
+ ),
119
+ "array_intersect": (
120
+ /** Return the entries from the first array that are also present in (group: array, result: <T>[]) */
121
+ slotted("array_intersect", ["value"], 1)
122
+ ),
123
+ "array_intersect_assoc": (
124
+ /** Return the entries from the first array that are also present in (group: array, result: <T>[]) */
125
+ slotted("array_intersect_assoc", ["value"], 1)
126
+ ),
127
+ "array_keys": (
128
+ /** Get the property keys of an object/array as a numerically indexed array. (group: array, result: text[]) */
129
+ () => filter("array_keys")
130
+ ),
131
+ "array_lower": (
132
+ /** Lowercases every STRING element of the piped array, leaving other elements alone. Element-wise, unlike `lower`, which expects one string. (group: array, result: <T>[]) */
133
+ () => filter("array_lower")
134
+ ),
135
+ "array_merge": (
136
+ /** Merge the first level of elements of both arrays together and (group: array, result: <T>[]) */
137
+ slotted("array_merge", ["value"], 1, false)
138
+ ),
139
+ "array_merge_recursive": (
140
+ /** Merge the elements from all levels of both arrays together and (group: array, result: <T>[]) */
141
+ slotted("array_merge_recursive", ["value"], 1, false)
142
+ ),
143
+ "array_pop": (
144
+ /** Pops the last element of the array off and returns it (group: array, result: <T>) */
145
+ () => filter("array_pop")
146
+ ),
147
+ "array_push": (
148
+ /** Push an element on to the end of an array and return the new array (group: array, result: <T>[]) */
149
+ slotted("array_push", ["value"], 1)
150
+ ),
151
+ "array_push_conditional": (
152
+ /** Appends `value` only when `conditional` is truthy, and returns the array either way — so an optional item needs no surrounding branch. (group: array, result: <T>[]) */
153
+ slotted("array_push_conditional", ["value", "conditional"], 2)
154
+ ),
155
+ "array_remove": (
156
+ /** Remove any elements from the array that match the supplied value (group: array, result: <T>[]) */
157
+ slotted("array_remove", ["value", "path", "strict"], 2)
158
+ ),
159
+ "array_replace": (
160
+ /** Replaces an element and returns the array. `match` is either an integer INDEX or a match object compared loosely against each element. ⚠ An index that does not exist throws (`Unable to find element.`). (group: array, result: <T>[]) */
161
+ slotted("array_replace", ["match", "result"], 2)
162
+ ),
163
+ "array_set": (
164
+ /** Sets a dotted path on the piped value and returns it, creating intermediate levels. A piped value that is not an array/object is replaced by an empty one rather than erroring. (group: manipulation, result: obj) */
165
+ slotted("array_set", ["path", "value"], 2)
166
+ ),
167
+ "array_shift": (
168
+ /** Shifts the first element of the array off and returns it (group: array, result: <T>) */
169
+ () => filter("array_shift")
170
+ ),
171
+ "array_shuffle": (
172
+ /** Shuffles the order of the entries in the array. (group: array, result: <T>[]) */
173
+ () => filter("array_shuffle")
174
+ ),
175
+ "array_slice": (
176
+ /** Extract a section from an array. (group: array, result: <T>[]) */
177
+ slotted("array_slice", ["offset", "length"], 1)
178
+ ),
179
+ "array_unshift": (
180
+ /** Push an element to the beginning of an array and return the new array (group: array, result: <T>[]) */
181
+ slotted("array_unshift", ["value"], 1)
182
+ ),
183
+ "array_upmerge": (
184
+ /** Merges `node` INTO every element matching `match` (loose comparison) and returns the array. An update-in-place for a list of records, where `array_replace` swaps the whole element. (group: array, result: <T>[]) */
185
+ slotted("array_upmerge", ["match", "node"], 2)
186
+ ),
187
+ "array_values": (
188
+ /** Get the property values of an object/array as a numerically indexed array (group: array, result: any[]) */
189
+ () => filter("array_values")
190
+ ),
191
+ "asin": (
192
+ /** Calculates the arc sine of the supplied value in radians (group: math, result: decimal) */
193
+ () => filter("asin")
194
+ ),
195
+ "asinh": (
196
+ /** Calculates the inverse hyperbolic sine of the supplied value in radians (group: math, result: decimal) */
197
+ () => filter("asinh")
198
+ ),
199
+ "atan": (
200
+ /** Calculates the arc tangent of the supplied value in radians (group: math, result: decimal) */
201
+ () => filter("atan")
202
+ ),
203
+ "atanh": (
204
+ /** Calculates the inverse hyperbolic tangent of the supplied value in radians (group: math, result: decimal) */
205
+ () => filter("atanh")
206
+ ),
207
+ "avg": (
208
+ /** Returns the average of the values of the array (group: math, result: decimal) */
209
+ () => filter("avg")
210
+ ),
211
+ "base64_decode": (
212
+ /** Decodes the value represented as base64 text and returns the result (group: transform, result: text) */
213
+ () => filter("base64_decode")
214
+ ),
215
+ "base64_decode_urlsafe": (
216
+ /** Decodes the value represented as base64 urlsafe text and returns the result (group: transform, result: text) */
217
+ () => filter("base64_decode_urlsafe")
218
+ ),
219
+ "base64_encode": (
220
+ /** Encodes the value and returns the result as base64 text (group: transform, result: text) */
221
+ () => filter("base64_encode")
222
+ ),
223
+ "base64_encode_urlsafe": (
224
+ /** Encodes the value and returns the result as base64 urlsafe text (group: transform, result: text) */
225
+ () => filter("base64_encode_urlsafe")
226
+ ),
227
+ "base_convert": (
228
+ /** Converts a value between two bases (group: transform, result: text) */
229
+ slotted("base_convert", ["from_base", "to_base"], 2)
230
+ ),
231
+ "bin2hex": (
232
+ /** Converts a binary value into its hex equivalent (group: transform, result: text) */
233
+ () => filter("bin2hex")
234
+ ),
235
+ "bindec": (
236
+ /** Converts a binary string (i.e. 01010) into its decimal equivalent (group: transform, result: text) */
237
+ () => filter("bindec")
238
+ ),
239
+ "bitwise_and": (
240
+ /** Bitwise AND 2 values together and return the answer (group: math, result: int) */
241
+ slotted("bitwise_and", ["value"], 1)
242
+ ),
243
+ "bitwise_not": (
244
+ /** Returns the existing value with its bits flipped (group: comparison, result: bool) */
245
+ () => filter("bitwise_not")
246
+ ),
247
+ "bitwise_or": (
248
+ /** Bitwise OR 2 values together and return the answer (group: math, result: int) */
249
+ slotted("bitwise_or", ["value"], 1)
250
+ ),
251
+ "bitwise_xor": (
252
+ /** Bitwise XOR 2 values together and return the answer (group: math, result: int) */
253
+ slotted("bitwise_xor", ["value"], 1)
254
+ ),
255
+ "capitalize": (
256
+ /** Converts the first letter of each word to a capital letter (group: text, result: text) */
257
+ () => filter("capitalize")
258
+ ),
259
+ "ceil": (
260
+ /** Round a decimal up to its integer equivalent (group: math, result: int) */
261
+ () => filter("ceil")
262
+ ),
263
+ "clamp_max": (
264
+ /** Lowers the piped number to `max` when it is above it; otherwise returns it unchanged. (group: math, result: decimal) */
265
+ slotted("clamp_max", ["max"], 1)
266
+ ),
267
+ "clamp_min": (
268
+ /** Raises the piped number to `min` when it is below it; otherwise returns it unchanged. (group: math, result: decimal) */
269
+ slotted("clamp_min", ["min"], 1)
270
+ ),
271
+ "concat": (
272
+ /** Concatenates two values together (group: text, result: text) */
273
+ slotted("concat", ["value"], 1, false)
274
+ ),
275
+ "contains": (
276
+ /** Returns whether or not the expression is found Direction: the piped value is the subject text; the argument is the substring searched for. (group: text, result: bool) */
277
+ slotted("contains", ["search"], 1)
278
+ ),
279
+ "convert_encoding": (
280
+ /** Convert the character encoding of the supplied text (group: text, result: text) */
281
+ slotted("convert_encoding", ["to", "from"], 2)
282
+ ),
283
+ "cos": (
284
+ /** Calculates the cosine of the supplied value in radians (group: math, result: decimal) */
285
+ () => filter("cos")
286
+ ),
287
+ "count": (
288
+ /** Return the number of items in an object/array (group: array, result: int) */
289
+ () => filter("count")
290
+ ),
291
+ "create_object": (
292
+ /** Creates an object based on a list of keys and a list of values (group: transform, result: any) */
293
+ slotted("create_object", ["values"], 1)
294
+ ),
295
+ "create_object_from_entries": (
296
+ /** Creates an object based on an array of key/value pairs. (i.e. same result as the entries filter) (group: transform, result: any) */
297
+ () => filter("create_object_from_entries")
298
+ ),
299
+ "crypto_jwe_decode": (
300
+ /** Decodes the JWE token and return the result (group: security, result: json) */
301
+ slotted("crypto_jwe_decode", ["check_claims", "key", "key_algorithm", "content_algorithm", "timeDrift"], 4)
302
+ ),
303
+ "crypto_jwe_encode": (
304
+ /** Encodes the value and return the result as a JWE token (group: security, result: text) */
305
+ slotted("crypto_jwe_encode", ["headers", "key", "key_algorithm", "content_algorithm", "ttl"], 4)
306
+ ),
307
+ "crypto_jws_decode": (
308
+ /** Decodes the JWS token and return the result (group: security, result: json) */
309
+ slotted("crypto_jws_decode", ["check_claims", "key", "algorithm", "timeDrift"], 3)
310
+ ),
311
+ "crypto_jws_encode": (
312
+ /** Encodes the value and return the result as a JWS token (group: security, result: text) */
313
+ slotted("crypto_jws_encode", ["headers", "key", "algorithm", "ttl"], 3)
314
+ ),
315
+ "csv_create": (
316
+ /** Creates a CSV format data stream from a list of column names and their corresponding data rows. Direction: the piped value is the list of COLUMN NAMES (written as the header line); the `rows` argument carries the data rows. This is the header-writing counterpart to `csv_encode`, which emits values only. (group: transform, result: text) */
317
+ slotted("csv_create", ["rows", "separator", "enclosure", "escape"], 4)
318
+ ),
319
+ "csv_decode": (
320
+ /** Decodes the value represented in the CSV format and returns the result (group: transform, result: any) */
321
+ slotted("csv_decode", ["separator", "enclosure", "escape"], 3)
322
+ ),
323
+ "csv_encode": (
324
+ /** Encodes the value and returns the result in CSV format Writes NO header row — values only. Each row contributes its own values in THAT row's key order, with no normalization across rows, so rows whose keys differ in order or count silently misalign columns rather than erroring. Non-scalar cells (nested objects/arrays) are JSON-encoded into the cell, and `false` writes as empty. If the piped array's elements are scalars rather than objects, the whole array is treated as ONE row and you get a single line. For a header, use `csv_create`. (group: transform, result: text) */
325
+ slotted("csv_encode", ["separator", "enclosure", "escape"], 3)
326
+ ),
327
+ "csv_parse": (
328
+ /** Parse the contents of a CSV file and convert it into an array of objects. (group: transform, result: any) */
329
+ slotted("csv_parse", ["separator", "enclosure", "escape"], 3)
330
+ ),
331
+ "decbin": (
332
+ /** Converts a decimal value into its binary string (i.e. 01010) equivalent (group: transform, result: text) */
333
+ () => filter("decbin")
334
+ ),
335
+ "dechex": (
336
+ /** Converts a decimal value into its hex equivalent (group: transform, result: text) */
337
+ () => filter("dechex")
338
+ ),
339
+ "decoct": (
340
+ /** Converts a decimal value into its octal equivalent (group: transform, result: text) */
341
+ () => filter("decoct")
342
+ ),
343
+ "decrypt": (
344
+ /** Decrypts the value and returns the result. (group: security, result: text) */
345
+ slotted("decrypt", ["algorithm", "key", "iv"], 3)
346
+ ),
347
+ "deg2rad": (
348
+ /** Convert degrees to radians (group: math, result: decimal) */
349
+ () => filter("deg2rad")
350
+ ),
351
+ "detect_encoding": (
352
+ /** Detect the character encoding of the supplied text (group: text, result: text) */
353
+ slotted("detect_encoding", ["encodings"], 0)
354
+ ),
355
+ "div": (
356
+ /** Divides 2 values together and returns the answer (group: math, result: decimal) */
357
+ slotted("div", ["value"], 1)
358
+ ),
359
+ "empty": (
360
+ /** Returns whether or not the value is empty ("", null, 0, "0", false, [], {}) (group: comparison, result: bool) */
361
+ () => filter("empty")
362
+ ),
363
+ "encrypt": (
364
+ /** Encrypts the value and returns the result in raw binary form. (group: security, result: text) */
365
+ slotted("encrypt", ["algorithm", "key", "iv"], 3)
366
+ ),
367
+ "ends_with": (
368
+ /** Returns whether or not the expression is present at the end Direction: the piped value is the subject text; the argument is the substring searched for. (group: text, result: bool) */
369
+ slotted("ends_with", ["search"], 1)
370
+ ),
371
+ "epochms_add_ms": (
372
+ /** Add milliseconds to a timestamp. (negative values are ok) (group: timestamp, result: epochms) */
373
+ slotted("epochms_add_ms", ["milliseconds"], 1)
374
+ ),
375
+ "epochms_add_secs": (
376
+ /** Add seconds to a timestamp. (negative values are ok) (group: timestamp, result: epochms) */
377
+ slotted("epochms_add_secs", ["seconds"], 1)
378
+ ),
379
+ "epochms_date": (
380
+ /** Converts a timestamp into a human readable formatted date based on (group: timestamp, result: text) */
381
+ slotted("epochms_date", ["format", "timezone"], 1)
382
+ ),
383
+ "epochms_from_format": (
384
+ /** Parse a timestamp from a flexible format. (group: timestamp, result: text) */
385
+ slotted("epochms_from_format", ["format", "timezone"], 1)
386
+ ),
387
+ "epochms_transform": (
388
+ /** Takes a timestamp and applies a relative transformation to it. Ex. (group: timestamp, result: text) */
389
+ slotted("epochms_transform", ["format", "timezone"], 1)
390
+ ),
391
+ "eq": (
392
+ /** Returns a boolean if both values are equal (group: comparison, result: bool) */
393
+ slotted("eq", ["value"], 1)
394
+ ),
395
+ "escape": (
396
+ /** Converts special characters into their escaped variants. Ex: for tabs and (group: text, result: text) */
397
+ () => filter("escape")
398
+ ),
399
+ "even": (
400
+ /** Returns whether or not the value is even (group: comparison, result: bool) */
401
+ () => filter("even")
402
+ ),
403
+ "every": (
404
+ /** Checks if all elements in the array pass the test implemented by the provided function. (group: array, result: any[]) */
405
+ slotted("every", ["code", "timeout"], 1)
406
+ ),
407
+ "exp": (
408
+ /** Returns the exponent of mathematical expression "e" (group: math, result: decimal) */
409
+ () => filter("exp")
410
+ ),
411
+ "filter": (
412
+ /** Filters the elements of an array based on the code block returning true to keep the element or false to skip it. (group: array, result: any[]) */
413
+ slotted("filter", ["code", "timeout"], 1)
414
+ ),
415
+ "filter_empty": (
416
+ /** Returns a new array with only entries that are not empty ("", null, 0, "0", false, [], {}) (group: array, result: <T>[]) */
417
+ slotted("filter_empty", ["path"], 0)
418
+ ),
419
+ "filter_empty_array": (
420
+ /** Returns a new array with only entries that are not an empty array `[]` (group: array, result: <T>[]) */
421
+ slotted("filter_empty_array", ["path"], 0)
422
+ ),
423
+ "filter_empty_object": (
424
+ /** Returns a new array with only entries that are not an empty object `{}` (group: array, result: <T>[]) */
425
+ slotted("filter_empty_object", ["path"], 0)
426
+ ),
427
+ "filter_empty_text": (
428
+ /** Returns a new array with only entries that are not empty ("", null, 0, "0", false, [], {}) (group: array, result: <T>[]) */
429
+ slotted("filter_empty_text", ["path"], 0)
430
+ ),
431
+ "filter_false": (
432
+ /** Returns a new array with only entries that are not false (group: array, result: <T>[]) */
433
+ slotted("filter_false", ["path"], 0)
434
+ ),
435
+ "filter_null": (
436
+ /** Returns a new array with only entries that are not null (group: array, result: <T>[]) */
437
+ slotted("filter_null", ["path"], 0)
438
+ ),
439
+ "filter_zero": (
440
+ /** Returns a new array with only entries that are not zero (group: array, result: <T>[]) */
441
+ slotted("filter_zero", ["path"], 0)
442
+ ),
443
+ "find": (
444
+ /** Finds if all elements in the array pass the test implemented by the provided function. (group: array, result: any[]) */
445
+ slotted("find", ["code", "timeout"], 1)
446
+ ),
447
+ "findIndex": (
448
+ /** Finds the index of the first element in the array that passes the test implemented by the provided function. (group: array, result: any[]) */
449
+ slotted("findIndex", ["code", "timeout"], 1)
450
+ ),
451
+ "first": (
452
+ /** Get the first entry of an array (group: array, result: <T>) */
453
+ () => filter("first")
454
+ ),
455
+ "first_notempty": (
456
+ /** Returns the first value that is not empty - i.e. not ("", null, 0, "0", false, [], {}) (group: manipulation, result: any) */
457
+ slotted("first_notempty", ["value"], 1)
458
+ ),
459
+ "first_notnull": (
460
+ /** Returns the first value that is not null (group: manipulation, result: any) */
461
+ slotted("first_notnull", ["value"], 1)
462
+ ),
463
+ "flatten": (
464
+ /** Flattens a multidimensional array into a single level array of values. (group: array, result: <T>[]) */
465
+ () => filter("flatten")
466
+ ),
467
+ "floor": (
468
+ /** Round a decimal down to its integer equivalent (group: math, result: int) */
469
+ () => filter("floor")
470
+ ),
471
+ "from_utf8": (
472
+ /** Convert the supplied text from UTF-8 to its binary form (ISO-8859-1). (group: text, result: text) */
473
+ () => filter("from_utf8")
474
+ ),
475
+ "fsort": (
476
+ /** Sort an array of elements with an optional path inside the element Only `type: "number"` compares NUMERICALLY. "text"/"itext" are case-sensitive/insensitive string compares, "natural"/"inatural" are the human-readable "a2 < a10" orderings, and the default is "itext". An unrecognized spelling silently falls through to "itext" rather than erroring, so a numeric sort MUST spell "number" — anything else returns the right elements in the wrong order. `path` drills into each element. (group: array, result: <T>[]) */
477
+ slotted("fsort", ["path", "type", "asc"], 0)
478
+ ),
479
+ "get": (
480
+ /** Returns the value of an object at the specified path (group: manipulation, result: any) */
481
+ slotted("get", ["path", "default_"], 1, false)
482
+ ),
483
+ "gt": (
484
+ /** Returns a boolean if the left value is greater than the right value (group: comparison, result: bool) */
485
+ slotted("gt", ["value"], 1)
486
+ ),
487
+ "gte": (
488
+ /** Returns a boolean if the left value is greater than or equal to the (group: comparison, result: bool) */
489
+ slotted("gte", ["value"], 1)
490
+ ),
491
+ "has": (
492
+ /** Returns the existence of whether or not something is present in the object at the specified path (group: manipulation, result: bool) */
493
+ slotted("has", ["path"], 1)
494
+ ),
495
+ "hex2bin": (
496
+ /** Converts a hex value into its binary equivalent (group: transform, result: text) */
497
+ () => filter("hex2bin")
498
+ ),
499
+ "hexdec": (
500
+ /** Converts a hex value into its decimal equivalent (group: transform, result: text) */
501
+ () => filter("hexdec")
502
+ ),
503
+ "hmac_md5": (
504
+ /** Returns a MD5 signature representation of the value using a shared secret via the HMAC method (group: security, result: text) */
505
+ slotted("hmac_md5", ["key", "raw"], 1)
506
+ ),
507
+ "hmac_sha1": (
508
+ /** Returns a SHA1 signature representation of the value using a shared secret via the HMAC method (group: security, result: text) */
509
+ slotted("hmac_sha1", ["key", "raw"], 1)
510
+ ),
511
+ "hmac_sha256": (
512
+ /** Returns a SHA256 signature representation of the value using a shared secret via the HMAC method (group: security, result: text) */
513
+ slotted("hmac_sha256", ["key", "raw"], 1)
514
+ ),
515
+ "hmac_sha384": (
516
+ /** Returns a SHA384 signature representation of the value using a shared secret via the HMAC method (group: security, result: text) */
517
+ slotted("hmac_sha384", ["key", "raw"], 1)
518
+ ),
519
+ "hmac_sha512": (
520
+ /** Returns a SHA512 signature representation of the value using a shared secret via the HMAC method (group: security, result: text) */
521
+ slotted("hmac_sha512", ["key", "raw"], 1)
522
+ ),
523
+ "icontains": (
524
+ /** Returns whether or not the case-insensitive expression is found Direction: the piped value is the subject text; the argument is the substring searched for. (group: text, result: bool) */
525
+ slotted("icontains", ["search"], 1)
526
+ ),
527
+ "iends_with": (
528
+ /** Returns whether or not the case-insensitive expression is present at the end Direction: the piped value is the subject text; the argument is the substring searched for. (group: text, result: bool) */
529
+ slotted("iends_with", ["search"], 1)
530
+ ),
531
+ "in": (
532
+ /** Returns whether or not the value is in the array (group: comparison, result: bool) */
533
+ slotted("in", ["search"], 1)
534
+ ),
535
+ "index_by": (
536
+ /** Groups the piped array into an OBJECT keyed by each item's path — every value is an ARRAY of the items sharing that key, even when only one item does. So a lookup reads `idx[key][0]`, not `idx[key]`; the singular spelling yields null rather than erroring. Items whose path is missing or non-scalar are dropped. (group: array, result: { [key: string]: <T>[] }) */
537
+ slotted("index_by", ["path"], 1, false)
538
+ ),
539
+ "is_array": (
540
+ /** Returns whether or not the value is a numerical indexed array. (group: comparison, result: bool) */
541
+ () => filter("is_array")
542
+ ),
543
+ "is_bool": (
544
+ /** Returns whether or not the value is a boolean. (group: comparison, result: bool) */
545
+ () => filter("is_bool")
546
+ ),
547
+ "is_decimal": (
548
+ /** Returns whether or not the value is a decimal value. (group: comparison, result: bool) */
549
+ () => filter("is_decimal")
550
+ ),
551
+ "is_int": (
552
+ /** Returns whether or not the value is an integer. (group: comparison, result: bool) */
553
+ () => filter("is_int")
554
+ ),
555
+ "is_object": (
556
+ /** Returns whether or not the value is an object. (group: comparison, result: bool) */
557
+ () => filter("is_object")
558
+ ),
559
+ "is_text": (
560
+ /** Returns whether or not the value is text. (group: comparison, result: bool) */
561
+ () => filter("is_text")
562
+ ),
563
+ "is_uuid": (
564
+ /** Returns whether or not the value is a valid UUID. (group: comparison, result: bool) */
565
+ () => filter("is_uuid")
566
+ ),
567
+ "istarts_with": (
568
+ /** Returns whether or not the case-insensitive expression is present at the beginning Direction: the piped value is the subject text; the argument is the substring searched for. (group: text, result: bool) */
569
+ slotted("istarts_with", ["search"], 1)
570
+ ),
571
+ "join": (
572
+ /** Joins an array into a text string via the separator and returns the result (group: array, result: text) */
573
+ slotted("join", ["separator"], 1)
574
+ ),
575
+ "json_decode": (
576
+ /** Decodes the value represented as json and returns the result (group: transform, result: any) */
577
+ () => filter("json_decode")
578
+ ),
579
+ "json_encode": (
580
+ /** Encodes the value and returns the result as json text (group: transform, result: text) */
581
+ () => filter("json_encode")
582
+ ),
583
+ "jwe_decode": (
584
+ /** Decodes the JWE token and return the result */
585
+ slotted("jwe_decode", ["arg1"], 1, false)
586
+ ),
587
+ "jwe_encode": (
588
+ /** Encodes the value and return the result as a JWE token */
589
+ slotted("jwe_encode", ["arg1"], 1, false)
590
+ ),
591
+ "lambda": (
592
+ /** Business logic using JavaScript. (group: transform, result: any) */
593
+ slotted("lambda", ["code", "timeout"], 1)
594
+ ),
595
+ "last": (
596
+ /** Get the last entry of an array (group: array, result: <T>) */
597
+ () => filter("last")
598
+ ),
599
+ "list_encodings": (
600
+ /** List support character encodings (group: text, result: text[]) */
601
+ () => filter("list_encodings")
602
+ ),
603
+ "ln": (
604
+ /** Returns the natural logarithm (group: math, result: decimal) */
605
+ () => filter("ln")
606
+ ),
607
+ "log": (
608
+ /** Returns the logarithm with a custom base (group: math, result: decimal) */
609
+ slotted("log", ["base"], 1)
610
+ ),
611
+ "log10": (
612
+ /** Returns the Base-10 logarithm (group: math, result: decimal) */
613
+ () => filter("log10")
614
+ ),
615
+ "lower": (
616
+ /** Converts all characters to lower case and returns the result (group: text, result: text) */
617
+ () => filter("lower")
618
+ ),
619
+ "lt": (
620
+ /** Returns a boolean if the left value is less than the right value (group: comparison, result: bool) */
621
+ slotted("lt", ["value"], 1)
622
+ ),
623
+ "lte": (
624
+ /** Returns a boolean if the left value is less than or equal to the right value (group: comparison, result: bool) */
625
+ slotted("lte", ["value"], 1)
626
+ ),
627
+ "ltrim": (
628
+ /** Trim whitespace or other characters from the left side and return the result (group: text, result: text) */
629
+ slotted("ltrim", ["mask"], 0)
630
+ ),
631
+ "map": (
632
+ /** Creates a new array with the results of calling a provided function on every element in the calling array. (group: array, result: any[]) */
633
+ slotted("map", ["code", "timeout"], 1)
634
+ ),
635
+ "max": (
636
+ /** Returns the max of the values of the array Over a SCALAR it takes a bound instead and returns the larger of the two, so `max(8)` on 5 is 8. The array form ignores any argument; an EMPTY array yields null. (group: math, result: decimal) */
637
+ slotted("max", ["bound"], 0)
638
+ ),
639
+ "md5": (
640
+ /** Returns a MD5 signature representation of the value (group: security, result: text) */
641
+ slotted("md5", ["raw"], 0)
642
+ ),
643
+ "min": (
644
+ /** Returns the min of the values of the array Over a SCALAR it takes a bound instead and returns the smaller of the two, so `min(3)` on 5 is 3. The array form ignores any argument; an EMPTY array yields null. (group: math, result: decimal) */
645
+ slotted("min", ["bound"], 0)
646
+ ),
647
+ "mod": (
648
+ /** Modulus 2 values together and return the answer (group: math, result: int) */
649
+ slotted("mod", ["value"], 1)
650
+ ),
651
+ "ms_to_secs": (
652
+ /** Milliseconds to whole seconds, truncated toward zero. The inverse of `secs_to_ms`, and the conversion between an epochms value and the SECOND counts every ttl/expiry knob takes. (group: timestamp, result: int) */
653
+ () => filter("ms_to_secs")
654
+ ),
655
+ "mul": (
656
+ /** Multiplies 2 values together and returns the answer (group: math, result: decimal) */
657
+ slotted("mul", ["value"], 1)
658
+ ),
659
+ "ne": (
660
+ /** Returns a boolean if both values are not equal (group: comparison, result: bool) */
661
+ slotted("ne", ["value"], 1)
662
+ ),
663
+ "not": (
664
+ /** Returns the opposite of the existing value evaluated as a boolean (group: comparison, result: bool) */
665
+ () => filter("not")
666
+ ),
667
+ "null": (
668
+ /** Returns a null value. (group: misc, result: null) */
669
+ () => filter("null")
670
+ ),
671
+ "num_max": (
672
+ /** Returns the max both values (group: math, result: decimal) */
673
+ slotted("num_max", ["value"], 1)
674
+ ),
675
+ "num_min": (
676
+ /** Returns the min both values (group: math, result: decimal) */
677
+ slotted("num_min", ["value"], 1)
678
+ ),
679
+ "number_format": (
680
+ /** Format a number with flexible support over decimal places, thousands separator, and decimal separator. (group: math, result: string) */
681
+ slotted("number_format", ["decimals", "decimal_separator", "thousands_separator"], 3)
682
+ ),
683
+ "octdec": (
684
+ /** Converts an octal value into its decimal equivalent (group: transform, result: text) */
685
+ () => filter("octdec")
686
+ ),
687
+ "odd": (
688
+ /** Returns whether or not the value is odd (group: comparison, result: bool) */
689
+ () => filter("odd")
690
+ ),
691
+ "pick": (
692
+ /** Pick keys from the object to create a new object of just those keys. (group: array, result: <T>) */
693
+ slotted("pick", ["keys"], 1)
694
+ ),
695
+ "pow": (
696
+ /** Returns the value raised to the power of exp. (group: math, result: decimal) */
697
+ slotted("pow", ["exp"], 1)
698
+ ),
699
+ "prepend": (
700
+ /** Push an element on to the beginning of an array within an object and return the updated object (group: array, result: <T>[]) */
701
+ slotted("prepend", ["value", "path"], 2)
702
+ ),
703
+ "product": (
704
+ /** Returns the product of the values of the array (group: math, result: decimal) */
705
+ () => filter("product")
706
+ ),
707
+ "querystring_parse": (
708
+ /** Parses a query string from a URL into its individual key-value pairs. (group: text, result: json) */
709
+ () => filter("querystring_parse")
710
+ ),
711
+ "rad2deg": (
712
+ /** Convert radians to degrees (group: math, result: decimal) */
713
+ () => filter("rad2deg")
714
+ ),
715
+ "range": (
716
+ /** Returns array of values between the specified start/stop. (group: array, result: int[]) */
717
+ slotted("range", ["start", "stop"], 2)
718
+ ),
719
+ "reduce": (
720
+ /** Reduces the array to a single value using the code block to combine each element of the array. (group: array, result: any[]) */
721
+ slotted("reduce", ["initial_value", "code", "timeout"], 2)
722
+ ),
723
+ "regex_match": (
724
+ /** Return the first set of matches performed by a regular expression Direction: the piped value is the regex PATTERN; the `subject` argument is the text tested against it — reversed vs starts_with/contains. Build the pattern with c.regex(...) (delimiter-wrapped); a bare c.text(...) is rejected. (group: text, result: text[]) */
725
+ slotted("regex_match", ["subject"], 1)
726
+ ),
727
+ "regex_match_all": (
728
+ /** Return all matches performed by a regular expression on the Direction: the piped value is the regex PATTERN; the `subject` argument is the text tested against it — reversed vs starts_with/contains. Build the pattern with c.regex(...) (delimiter-wrapped); a bare c.text(...) is rejected. (group: text, result: text[]) */
729
+ slotted("regex_match_all", ["subject"], 1)
730
+ ),
731
+ "regex_quote": (
732
+ /** Update the supplied text value to be properly escaped for regular expressions. (group: text, result: text) */
733
+ slotted("regex_quote", ["delimiter"], 0)
734
+ ),
735
+ "regex_replace": (
736
+ /** Perform a regular expression search and replace on the supplied subject text. Direction: the piped value is the regex PATTERN; the `subject` argument is the text tested against it — reversed vs starts_with/contains. Build the pattern with c.regex(...) (delimiter-wrapped); a bare c.text(...) is rejected. (group: text, result: text) */
737
+ slotted("regex_replace", ["replacement", "subject"], 2)
738
+ ),
739
+ "regex_test": (
740
+ /** Tests if a regular expression matches the supplied subject text. Direction: the piped value is the regex PATTERN; the `subject` argument is the text tested against it — reversed vs starts_with/contains. Build the pattern with c.regex(...) (delimiter-wrapped); a bare c.text(...) is rejected. (group: text, result: bool) */
741
+ slotted("regex_test", ["subject"], 1)
742
+ ),
743
+ "reverse": (
744
+ /** Returns values of an array in reverse order (group: array, result: <T>[]) */
745
+ () => filter("reverse")
746
+ ),
747
+ "round": (
748
+ /** Round a decimal with optional precision (group: math, result: decimal) */
749
+ slotted("round", ["precision"], 0)
750
+ ),
751
+ "rsort": (
752
+ /** Sorts the piped array in DESCENDING order. A non-array is returned unchanged. (group: array, result: <T>[]) */
753
+ () => filter("rsort")
754
+ ),
755
+ "rtrim": (
756
+ /** Trim whitespace or other characters from the right return the result (group: text, result: text) */
757
+ slotted("rtrim", ["mask"], 0)
758
+ ),
759
+ "safe_array": (
760
+ /** Always returns an array. Uses the existing value if it is an array or creates an array of one element. (group: array, result: <T>[]) */
761
+ () => filter("safe_array")
762
+ ),
763
+ "secs_to_ms": (
764
+ /** Seconds to milliseconds. The inverse of `ms_to_secs`. (group: timestamp, result: int) */
765
+ () => filter("secs_to_ms")
766
+ ),
767
+ "secureid_decode": (
768
+ /** Returns the id of the original encode (group: security, result: int) */
769
+ slotted("secureid_decode", ["salt"], 1)
770
+ ),
771
+ "secureid_encode": (
772
+ /** Returns an encrypted version of the id (group: security, result: text) */
773
+ slotted("secureid_encode", ["salt"], 1)
774
+ ),
775
+ "set": (
776
+ /** Sets a value at the path within the object and returns the updated object (group: manipulation, result: any) */
777
+ slotted("set", ["path", "value"], 2)
778
+ ),
779
+ "set_conditional": (
780
+ /** Sets a value at the path within the object and returns the updated object, if the conditional expression is true (group: manipulation, result: any) */
781
+ slotted("set_conditional", ["path", "value", "conditional"], 3)
782
+ ),
783
+ "set_ifnotempty": (
784
+ /** Sets a value (if it is not empty: "", null, 0, "0", false, [], {}) at the path within the object and returns the updated object (group: manipulation, result: any) */
785
+ slotted("set_ifnotempty", ["path", "value"], 2)
786
+ ),
787
+ "set_ifnotnull": (
788
+ /** Sets a value (if it is not null) at the path within the object and returns the updated object (group: manipulation, result: any) */
789
+ slotted("set_ifnotnull", ["path", "value"], 2)
790
+ ),
791
+ "sha1": (
792
+ /** Returns a SHA1 signature representation of the value (group: security, result: text) */
793
+ slotted("sha1", ["raw"], 0)
794
+ ),
795
+ "sha256": (
796
+ /** Returns a SHA256 signature representation of the value (group: security, result: text) */
797
+ slotted("sha256", ["raw"], 0)
798
+ ),
799
+ "sha384": (
800
+ /** Returns a SHA384 signature representation of the value (group: security, result: text) */
801
+ slotted("sha384", ["raw"], 0)
802
+ ),
803
+ "sha512": (
804
+ /** Returns a SHA512 signature representation of the value (group: security, result: text) */
805
+ slotted("sha512", ["raw"], 0)
806
+ ),
807
+ "sin": (
808
+ /** Calculates the sine of the supplied value in radians (group: math, result: decimal) */
809
+ () => filter("sin")
810
+ ),
811
+ "some": (
812
+ /** Checks if at least one element in the array passes the test implemented by the provided function. (group: array, result: any[]) */
813
+ slotted("some", ["code", "timeout"], 1)
814
+ ),
815
+ "sort": (
816
+ /** Sort an array of elements with an optional path inside the element Takes NO arguments: a plain ascending sort of the whole value (mixed types compare loosely, and arrays of objects by size first). To sort by a key, a type or a direction use `fl.fsort(path, type, asc)` — that is also what XanoScript's `|sort:…` means. Prefer `fl.fsort` (`fl.fsort("", "number")` for numbers): a workspace saved through the XanoScript editor turns a stored `sort` into `fsort` with its text-order defaults. */
817
+ () => filter("sort")
818
+ ),
819
+ "splice": (
820
+ /** ⚠ Returns the REMOVED slice, not the remainder: splicing [1,2,3,4] at offset 1 for length 2 yields [2,3]. `length` defaults to 1. With a `path` it instead removes in place inside that path and returns the whole piped value — the two forms return different things. (group: array, result: <T>[]) */
821
+ slotted("splice", ["offset", "length", "path"], 1)
822
+ ),
823
+ "split": (
824
+ /** Splits text into an array of text and returns the result (group: text, result: text[]) */
825
+ slotted("split", ["separator"], 1)
826
+ ),
827
+ "sprintf": (
828
+ /** formats text with variable substitution (group: text, result: text) */
829
+ (...args) => filter("sprintf", ...args.map(v))
830
+ ),
831
+ "sql_alias": (
832
+ /** Wraps text in double quotes and escapes any double quotes within the text to prevent SQL injection attacks. This is useful for safely inserting user input into table names or aliases within SQL queries. (group: text, result: text) */
833
+ () => filter("sql_alias")
834
+ ),
835
+ "sql_esc": (
836
+ /** Wraps text in single quotes and escapes any single quotes within the text to prevent SQL injection attacks. This is useful for safely inserting user input into values within SQL queries. (group: text, result: text) */
837
+ () => filter("sql_esc")
838
+ ),
839
+ "sqrt": (
840
+ /** Returns the square root of the value (group: math, result: decimal) */
841
+ () => filter("sqrt")
842
+ ),
843
+ "starts_with": (
844
+ /** Returns whether or not the expression is present at the beginning Direction: the piped value is the subject text; the argument is the substring searched for. (group: text, result: bool) */
845
+ slotted("starts_with", ["search"], 1)
846
+ ),
847
+ "string_replace": (
848
+ /** Replace a text phrase with another (group: text, result: text) */
849
+ slotted("string_replace", ["search", "replacement"], 2)
850
+ ),
851
+ "strip_accents": (
852
+ /** Removes accents from characters (group: text, result: text) */
853
+ () => filter("strip_accents")
854
+ ),
855
+ "strip_tags": (
856
+ /** Removes HTML tags from a string (group: text, result: text) */
857
+ slotted("strip_tags", ["exclude"], 0)
858
+ ),
859
+ "stripos": (
860
+ /** Returns the index of the case-insensitive expression or false if it (group: text, result: int) */
861
+ slotted("stripos", ["search"], 1)
862
+ ),
863
+ "strlen": (
864
+ /** Returns the number of characters (group: text, result: int) */
865
+ () => filter("strlen")
866
+ ),
867
+ "strpos": (
868
+ /** Returns the index of the case-sensitive expression or false if it (group: text, result: int) */
869
+ slotted("strpos", ["search"], 1)
870
+ ),
871
+ "sub": (
872
+ /** Subtracts 2 values together and returns the answer (group: math, result: decimal) */
873
+ slotted("sub", ["value"], 1)
874
+ ),
875
+ "substr": (
876
+ /** Extracts a section of text (group: text, result: text) */
877
+ slotted("substr", ["start", "length"], 2)
878
+ ),
879
+ "sum": (
880
+ /** Returns the sum of the values of the array (group: math, result: decimal) */
881
+ () => filter("sum")
882
+ ),
883
+ "tan": (
884
+ /** Calculates the tangent of the supplied value in radians (group: math, result: decimal) */
885
+ () => filter("tan")
886
+ ),
887
+ "text_escape": (
888
+ /** Converts control characters into their escaped sequences. Ex: newlines as \n, tabs as \t (group: text, result: text) */
889
+ () => filter("text_escape")
890
+ ),
891
+ "text_unescape": (
892
+ /** Convert escaped sequences into their raw form. Ex: \n becomes a newline, \t becomes a tab. (group: text, result: text) */
893
+ () => filter("text_unescape")
894
+ ),
895
+ "to_bool": (
896
+ /** Converts text, integer, or decimal types to a bool and returns the result (group: transform, result: bool) */
897
+ () => filter("to_bool")
898
+ ),
899
+ "to_decimal": (
900
+ /** Converts text, integer, or bool types to a decimal and returns the result (group: transform, result: decimal) */
901
+ () => filter("to_decimal")
902
+ ),
903
+ "to_epoch_day": (
904
+ /** Converts a text expression (now, next friday, Jan 1 2000) to the (group: transform, result: int) */
905
+ slotted("to_epoch_day", ["timezone"], 0)
906
+ ),
907
+ "to_epoch_hour": (
908
+ /** Converts a text expression (now, next friday, Jan 1 2000) to the (group: transform, result: int) */
909
+ slotted("to_epoch_hour", ["timezone"], 0)
910
+ ),
911
+ "to_epoch_minute": (
912
+ /** Converts a text expression (now, next friday, Jan 1 2000) to the (group: transform, result: int) */
913
+ slotted("to_epoch_minute", ["timezone"], 0)
914
+ ),
915
+ "to_epoch_ms": (
916
+ /** Converts a text expression (now, next friday, Jan 1 2000) to the (group: transform, result: int) */
917
+ slotted("to_epoch_ms", ["timezone"], 0)
918
+ ),
919
+ "to_epoch_sec": (
920
+ /** Converts a text expression (now, next friday, Jan 1 2000) to the (group: transform, result: int) */
921
+ slotted("to_epoch_sec", ["timezone"], 0)
922
+ ),
923
+ "to_epochms": (
924
+ /** Converts a text expression (now, next friday, Jan 1 2000) to (group: transform, result: epochms) */
925
+ slotted("to_epochms", ["timezone"], 0)
926
+ ),
927
+ "to_expr": (
928
+ /** Treats the PIPED TEXT as Xano Expression Engine source, evaluates it, and returns the result. Takes no argument. `$var`, `$input`, `$env` and `$auth` resolve inside it; there is no operand binding (`$0` is null) because the operand IS the source. For an expression OVER a value, use fl.transform. (group: transform, result: any) */
929
+ () => filter("to_expr")
930
+ ),
931
+ "to_geo_linestring": (
932
+ /** Coerces the piped value to a geo LINESTRING, returned as WKT text. (group: geo, result: text) */
933
+ () => filter("to_geo_linestring")
934
+ ),
935
+ "to_geo_multilinestring": (
936
+ /** Coerces the piped value to a geo MULTILINESTRING, returned as WKT text. (group: geo, result: text) */
937
+ () => filter("to_geo_multilinestring")
938
+ ),
939
+ "to_geo_multipoint": (
940
+ /** Coerces the piped value to a geo MULTIPOINT, returned as WKT text. (group: geo, result: text) */
941
+ () => filter("to_geo_multipoint")
942
+ ),
943
+ "to_geo_multipolygon": (
944
+ /** Coerces the piped value to a geo MULTIPOLYGON, returned as WKT text. (group: geo, result: text) */
945
+ () => filter("to_geo_multipolygon")
946
+ ),
947
+ "to_geo_point": (
948
+ /** Coerces the piped value to a geo POINT, returned as WKT text. Accepts the {type, data} shape or a WKT string. (group: geo, result: text) */
949
+ () => filter("to_geo_point")
950
+ ),
951
+ "to_geo_polygon": (
952
+ /** Coerces the piped value to a geo POLYGON, returned as WKT text. (group: geo, result: text) */
953
+ () => filter("to_geo_polygon")
954
+ ),
955
+ "to_int": (
956
+ /** Converts text, decimal, or bool types to an integer and returns the result (group: transform, result: int) */
957
+ () => filter("to_int")
958
+ ),
959
+ "to_text": (
960
+ /** Converts integer, decimal, or bool types to text and returns the result (group: transform, result: text) */
961
+ () => filter("to_text")
962
+ ),
963
+ "to_utf8": (
964
+ /** Convert the supplied text from its binary form (ISO-8859-1) to UTF-8. (group: text, result: text) */
965
+ () => filter("to_utf8")
966
+ ),
967
+ "transform": (
968
+ /** Evaluates a Xano Expression Engine expression over the piped value. NOT a JavaScript body — there is no `return`, and the piped value binds POSITIONALLY as `$0` (or `$$`), NOT as `$this` (which resolves to null here, yielding a wrong answer with no error). `$var`, `$input`, `$env` and `$auth` also resolve, and filters may be piped inside the expression: `$0 * 2`, `$0|sort|join:","`, `{ id: $0.id, total: $0.qty * $0.price }`. PARENTHESIZE a pipe used inside an object/array literal — `{ s: ($0|sort|join:",") }` — or the filter argument's comma is read as the key separator, returning null and silently dropping every later key. For JavaScript use fl.lambda, whose body does bind `$this`. (group: manipulation, result: any) */
969
+ slotted("transform", ["expression"], 1)
970
+ ),
971
+ "trim": (
972
+ /** Trim whitespace or other characters from both sides and return the result (group: text, result: text) */
973
+ slotted("trim", ["mask"], 0)
974
+ ),
975
+ "uid": (
976
+ /** Returns a unique 64bit unsigned int value seeded off the value (group: security, result: int) */
977
+ () => filter("uid")
978
+ ),
979
+ "unique": (
980
+ /** Returns unique values of an array (group: array, result: <T>[]) */
981
+ slotted("unique", ["path"], 0)
982
+ ),
983
+ "unpick": (
984
+ /** Remove keys from the object to create a new object of the remaining keys. (group: array, result: <T>) */
985
+ slotted("unpick", ["keys"], 1)
986
+ ),
987
+ "unset": (
988
+ /** Removes a value at the path within the object and returns the updated object (group: manipulation, result: any) */
989
+ slotted("unset", ["path"], 1)
990
+ ),
991
+ "upper": (
992
+ /** Converts all characters to upper case and returns the result (group: text, result: text) */
993
+ () => filter("upper")
994
+ ),
995
+ "url_addarg": (
996
+ /** Parses a URL and returns an updated version with an encoded version of the supplied argument (group: text, result: text) */
997
+ slotted("url_addarg", ["key", "value", "encoding_rfc3986"], 2)
998
+ ),
999
+ "url_decode": (
1000
+ /** Decodes the value represented as a url encoded value (group: transform, result: text) */
1001
+ () => filter("url_decode")
1002
+ ),
1003
+ "url_decode_rfc3986": (
1004
+ /** Decodes the value represented as a url encoded value using the RFC 3986 specification (group: transform, result: text) */
1005
+ () => filter("url_decode_rfc3986")
1006
+ ),
1007
+ "url_delarg": (
1008
+ /** Parses a URL and returns an updated version with the supplied argument removed (group: text, result: text) */
1009
+ slotted("url_delarg", ["key"], 1)
1010
+ ),
1011
+ "url_encode": (
1012
+ /** Encodes the value and returns the result as a url encoded value (group: transform, result: text) */
1013
+ () => filter("url_encode")
1014
+ ),
1015
+ "url_encode_rfc3986": (
1016
+ /** Encodes the value and returns the result as a url encoded value using the RFC 3986 specification (group: transform, result: text) */
1017
+ () => filter("url_encode_rfc3986")
1018
+ ),
1019
+ "url_getarg": (
1020
+ /** Gets the argument's value from a URL (group: text, result: text) */
1021
+ slotted("url_getarg", ["key", "default_"], 1)
1022
+ ),
1023
+ "url_hasarg": (
1024
+ /** Returns the existence of a argument in the URL (group: text, result: text) */
1025
+ slotted("url_hasarg", ["key"], 1)
1026
+ ),
1027
+ "url_parse": (
1028
+ /** Parses a URL into its individual components. (group: text, result: json) */
1029
+ () => filter("url_parse")
1030
+ ),
1031
+ "uuid4": (
1032
+ /** Returns a universally unique identifier (group: security, result: text) */
1033
+ () => filter("uuid4")
1034
+ ),
1035
+ "xml_decode": (
1036
+ /** Decodes XML and returns the result (group: transform, result: any) */
1037
+ () => filter("xml_decode")
1038
+ ),
1039
+ "yaml_decode": (
1040
+ /** Decodes the value represented as yaml and returns the result (group: transform, result: obj) */
1041
+ () => filter("yaml_decode")
1042
+ ),
1043
+ "yaml_encode": (
1044
+ /** Encodes the value and returns the result as yaml text `inline` is the depth at which YAML stops expanding and starts writing flow style, and `indent` the spaces per level: the default writes a nested map over several lines, while `inline: 0` writes the whole value as `{ a: { b: 1 } }` on one. (group: transform, result: text) */
1045
+ slotted("yaml_encode", ["options", "inline", "indent"], 0)
1046
+ )
1047
+ };
1048
+
1049
+ export {
1050
+ FILTER_NAMES,
1051
+ FILTER_SPECS,
1052
+ FILTER_REQUIRED_ARGS,
1053
+ fl
1054
+ };
1055
+ //# sourceMappingURL=chunk-6HO3NCSJ.js.map